← กลับไปยังบทความทั้งหมด

การฟอร์กซอฟต์แวร์ การแยกสายการพัฒนาโค้ด

สรุปใจความสำคัญ

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

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

แผนผังแสดงการแยกสายการพัฒนาซอฟต์แวร์ (Forking)
แผนผังแสดงการแยกสายการพัฒนาจากโครงการหลักออกเป็นโครงการย่อยที่พัฒนาแยกจากกัน

ความแตกต่างระหว่างการฟอร์กและการแตกกิ่ง (Branching)

แม้ว่าการฟอร์กจะเป็นรูปแบบหนึ่งของการแตกกิ่ง (Branching) แต่มีความแตกต่างที่สำคัญคือ การฟอร์กมักเกี่ยวข้องกับการจัดเก็บไฟล์ที่คัดลอกแยกออกจากคลังเก็บโค้ด (Repository) เดิมอย่างสิ้นเชิง เพื่อสร้างโครงการใหม่ที่มีการบริหารจัดการแยกจากกัน ในขณะที่การแตกกิ่งมักเกิดขึ้นภายในคลังเก็บโค้ดเดียวกันเพื่อวัตถุประสงค์ในการทดสอบฟีเจอร์ใหม่หรือแก้ไขบั๊กก่อนจะรวมกลับเข้าสู่สายหลัก

สาเหตุของการฟอร์กซอฟต์แวร์

การตัดสินใจฟอร์กซอฟต์แวร์มักเกิดขึ้นจากปัจจัยหลายประการ ดังนี้:

  • ความต้องการของผู้ใช้: เมื่อกลุ่มผู้ใช้ต้องการคุณสมบัติที่โครงการต้นฉบับไม่นำเสนอ
  • การหยุดชะงักของการพัฒนา: เมื่อโครงการต้นฉบับไม่มีการอัปเดต หรือผู้พัฒนาหลักเลิกดูแลโครงการ
  • ความขัดแย้งในชุมชน: เกิดการเห็นต่างในด้านทิศทางการออกแบบ หรือความขัดแย้งระหว่างผู้พัฒนาจนนำไปสู่การแยกตัว

การฟอร์กในซอฟต์แวร์โอเพนซอร์สและซอฟต์แวร์กรรมสิทธิ์

กฎหมายลิขสิทธิ์มีบทบาทสำคัญต่อการฟอร์กซอฟต์แวร์:

ซอฟต์แวร์โอเพนซอร์ส (Open Source)

ตามคำนิยามของซอฟต์แวร์เสรี (Free Software) และโอเพนซอร์ส ผู้ใช้มีสิทธิ์ในการคัดลอก แก้ไข และเผยแพร่ซอฟต์แวร์ที่ดัดแปลงได้โดยไม่ต้องขออนุญาตจากผู้พัฒนาเดิม ซึ่งเป็นหัวใจสำคัญที่ทำให้เกิดระบบนิเวศของซอฟต์แวร์ที่หลากหลาย

ซอฟต์แวร์กรรมสิทธิ์ (Proprietary Software)

การฟอร์กซอฟต์แวร์ที่มีลิขสิทธิ์ครอบครอง (เช่น Unix ในยุคแรก) โดยไม่ได้รับอนุญาตอย่างเป็นทางการถือเป็นการละเมิดกฎหมายลิขสิทธิ์

พลวัตของชุมชนและผลลัพธ์ของการฟอร์ก

ในโลกของซอฟต์แวร์เสรี การฟอร์กมักถูกมองว่าเป็นเรื่องละเอียดอ่อน เนื่องจากอาจนำไปสู่การแบ่งแยกชุมชนผู้พัฒนา (Schism) ซึ่ง Eric S. Raymond ระบุว่าการฟอร์กอาจสร้างความขัดแย้งเรื่องความชอบธรรมและทิศทางการออกแบบ

ผลลัพธ์ที่เป็นไปได้ของการฟอร์ก

David A. Wheeler ได้จำแนกผลลัพธ์ของการฟอร์กไว้ 4 รูปแบบหลัก:

  1. การสิ้นสุดของสายฟอร์ก: สายที่แยกออกมาไม่สามารถพัฒนาต่อได้และเลิกราไป (พบบ่อยที่สุด)
  2. การรวมสายกลับคืน: สายที่ฟอร์กออกไปได้รับการยอมรับและรวมกลับเข้าเป็นเวอร์ชันหลักของโครงการเดิม
  3. การสิ้นสุดของโครงการต้นฉบับ: สายที่ฟอร์กออกไปประสบความสำเร็จมากกว่าจนกลายเป็นมาตรฐานใหม่แทนที่ต้นฉบับ
  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) อนุญาตให้ฟอร์กได้ตามเงื่อนไขของใบอนุญาต

การฟอร์กซอฟต์แวร์ส่งผลเสียอย่างไร?

อาจทำให้ชุมชนผู้พัฒนาแตกแยก เกิดการสิ้นเปลืองทรัพยากรในการพัฒนาซ้ำซ้อน และสร้างความขัดแย้งในเรื่องของความชอบธรรมในการเป็นเจ้าของโครงการ