การฟอร์กซอฟต์แวร์ การแยกสายการพัฒนาโค้ด
สรุปใจความสำคัญ
- การฟอร์กคือการคัดลอกชุดคำสั่งเดิมเพื่อนำไปพัฒนาต่อยอดเป็นอิสระจากโครงการต้นฉบับ
- ซอฟต์แวร์โอเพนซอร์สสามารถฟอร์กได้ตามกฎหมายภายใต้เงื่อนไขของใบอนุญาต (License)
- การฟอร์กแตกต่างจากการแตกกิ่ง (Branching) ตรงที่มักจะแยกคลังเก็บโค้ดออกจากกันอย่างสิ้นเชิง
- ผลลัพธ์ของการฟอร์กมีตั้งแต่การเลิกพัฒนา การรวมสายกลับคืน ไปจนถึงการแทนที่โครงการต้นฉบับ
ในการพัฒนาซอฟต์แวร์ การฟอร์ก (Fork) คือกระบวนการคัดลอกชุดคำสั่ง (Codebase) จากโครงการที่มีอยู่เดิม เพื่อนำไปพัฒนาต่อยอดหรือแก้ไขแยกเป็นอิสระจากโครงการต้นฉบับ โดยในช่วงเริ่มต้น ซอฟต์แวร์ที่เกิดจากการฟอร์กจะมีพฤติกรรมการทำงานที่เหมือนกับต้นฉบับทุกประการ แต่เมื่อเวลาผ่านไปและการแก้ไขโค้ดเพิ่มมากขึ้น ซอฟต์แวร์ทั้งสองสายจะเริ่มมีความแตกต่างกันทั้งในด้านคุณสมบัติและการทำงาน

ความแตกต่างระหว่างการฟอร์กและการแตกกิ่ง (Branching)
แม้ว่าการฟอร์กจะเป็นรูปแบบหนึ่งของการแตกกิ่ง (Branching) แต่มีความแตกต่างที่สำคัญคือ การฟอร์กมักเกี่ยวข้องกับการจัดเก็บไฟล์ที่คัดลอกแยกออกจากคลังเก็บโค้ด (Repository) เดิมอย่างสิ้นเชิง เพื่อสร้างโครงการใหม่ที่มีการบริหารจัดการแยกจากกัน ในขณะที่การแตกกิ่งมักเกิดขึ้นภายในคลังเก็บโค้ดเดียวกันเพื่อวัตถุประสงค์ในการทดสอบฟีเจอร์ใหม่หรือแก้ไขบั๊กก่อนจะรวมกลับเข้าสู่สายหลัก
สาเหตุของการฟอร์กซอฟต์แวร์
การตัดสินใจฟอร์กซอฟต์แวร์มักเกิดขึ้นจากปัจจัยหลายประการ ดังนี้:
- ความต้องการของผู้ใช้: เมื่อกลุ่มผู้ใช้ต้องการคุณสมบัติที่โครงการต้นฉบับไม่นำเสนอ
- การหยุดชะงักของการพัฒนา: เมื่อโครงการต้นฉบับไม่มีการอัปเดต หรือผู้พัฒนาหลักเลิกดูแลโครงการ
- ความขัดแย้งในชุมชน: เกิดการเห็นต่างในด้านทิศทางการออกแบบ หรือความขัดแย้งระหว่างผู้พัฒนาจนนำไปสู่การแยกตัว
การฟอร์กในซอฟต์แวร์โอเพนซอร์สและซอฟต์แวร์กรรมสิทธิ์
กฎหมายลิขสิทธิ์มีบทบาทสำคัญต่อการฟอร์กซอฟต์แวร์:
ซอฟต์แวร์โอเพนซอร์ส (Open Source)
ตามคำนิยามของซอฟต์แวร์เสรี (Free Software) และโอเพนซอร์ส ผู้ใช้มีสิทธิ์ในการคัดลอก แก้ไข และเผยแพร่ซอฟต์แวร์ที่ดัดแปลงได้โดยไม่ต้องขออนุญาตจากผู้พัฒนาเดิม ซึ่งเป็นหัวใจสำคัญที่ทำให้เกิดระบบนิเวศของซอฟต์แวร์ที่หลากหลาย
ซอฟต์แวร์กรรมสิทธิ์ (Proprietary Software)
การฟอร์กซอฟต์แวร์ที่มีลิขสิทธิ์ครอบครอง (เช่น Unix ในยุคแรก) โดยไม่ได้รับอนุญาตอย่างเป็นทางการถือเป็นการละเมิดกฎหมายลิขสิทธิ์
พลวัตของชุมชนและผลลัพธ์ของการฟอร์ก
ในโลกของซอฟต์แวร์เสรี การฟอร์กมักถูกมองว่าเป็นเรื่องละเอียดอ่อน เนื่องจากอาจนำไปสู่การแบ่งแยกชุมชนผู้พัฒนา (Schism) ซึ่ง Eric S. Raymond ระบุว่าการฟอร์กอาจสร้างความขัดแย้งเรื่องความชอบธรรมและทิศทางการออกแบบ
ผลลัพธ์ที่เป็นไปได้ของการฟอร์ก
David A. Wheeler ได้จำแนกผลลัพธ์ของการฟอร์กไว้ 4 รูปแบบหลัก:
- การสิ้นสุดของสายฟอร์ก: สายที่แยกออกมาไม่สามารถพัฒนาต่อได้และเลิกราไป (พบบ่อยที่สุด)
- การรวมสายกลับคืน: สายที่ฟอร์กออกไปได้รับการยอมรับและรวมกลับเข้าเป็นเวอร์ชันหลักของโครงการเดิม
- การสิ้นสุดของโครงการต้นฉบับ: สายที่ฟอร์กออกไปประสบความสำเร็จมากกว่าจนกลายเป็นมาตรฐานใหม่แทนที่ต้นฉบับ
- การแยกสายอย่างถาวร: ทั้งสองโครงการพัฒนาแยกจากกันและสร้างจุดเด่นที่แตกต่างกันอย่างชัดเจน
การจำแนกประเภทการฟอร์กตามระดับความแตกต่าง
Michael Widenius ผู้สร้าง MariaDB ได้เสนอการแบ่งประเภทการฟอร์กตามความสัมพันธ์กับโครงการต้นฉบับ ดังนี้:
| ประเภทการฟอร์ก | ลักษณะสำคัญ | ตัวอย่าง |
|---|---|---|
| Downstream "no-changes" | คัดลอกและปรับปรุงเล็กน้อยโดยไม่มีการเปลี่ยนแปลงที่ผู้ใช้สังเกตเห็น | การแพ็กเกจซอฟต์แวร์ในดิสทริบิวชัน |
| Downstream fork | เพิ่มคุณสมบัติใหม่แต่ยังคงความเข้ากันได้กับต้นฉบับ | Ubuntu (ฟอร์กจาก Debian) |
| Compatibility fork | เริ่มเขียนโค้ดใหม่บางส่วนแต่ยังเน้นความเข้ากันได้สูง | LibreOffice |
| Independent fork | เป็นอิสระจากต้นฉบับอย่างสมบูรณ์ แต่อาจรับไอเดียบางส่วนมาใช้ | illumos |
คำถามที่พบบ่อย
การฟอร์ก (Fork) ต่างจากการแตกกิ่ง (Branch) อย่างไร?
การแตกกิ่ง (Branching) มักเกิดขึ้นภายในคลังเก็บโค้ด (Repository) เดียวกันเพื่อพัฒนาฟีเจอร์ชั่วคราวแล้วรวมกลับเข้าสายหลัก แต่การฟอร์ก (Forking) คือการคัดลอกโครงการทั้งหมดออกไปสร้างคลังเก็บโค้ดใหม่เพื่อพัฒนาเป็นโครงการแยกอิสระ
เราสามารถฟอร์กซอฟต์แวร์ใดก็ได้หรือไม่?
ไม่ได้ ซอฟต์แวร์กรรมสิทธิ์ (Proprietary Software) ห้ามฟอร์กโดยไม่ได้รับอนุญาตเนื่องจากติดกฎหมายลิขสิทธิ์ แต่ซอฟต์แวร์โอเพนซอร์ส (Open Source) อนุญาตให้ฟอร์กได้ตามเงื่อนไขของใบอนุญาต
การฟอร์กซอฟต์แวร์ส่งผลเสียอย่างไร?
อาจทำให้ชุมชนผู้พัฒนาแตกแยก เกิดการสิ้นเปลืองทรัพยากรในการพัฒนาซ้ำซ้อน และสร้างความขัดแย้งในเรื่องของความชอบธรรมในการเป็นเจ้าของโครงการ


