ข้อผิดพลาดที่พบบ่อยเกี่ยวกับการใช้สัญญาอนุญาตโอเพนซอร์สและวิธีหลีกเลี่ยง

ข้อผิดพลาดที่พบบ่อยเกี่ยวกับการใช้สัญญาอนุญาตโอเพนซอร์สและวิธีหลีกเลี่ยง

ความแตกต่างของสัญญาอนุญาตที่นักพัฒนามักมองข้าม

สัญญาอนุญาตโอเพนซอร์ส (Open Source License) ไม่ได้มีลักษณะเดียวกันทั้งหมด แม้ผู้ใช้หลายคนจะมองว่า “โอเพนซอร์สเท่ากับใช้ฟรีได้ทุกอย่าง” แต่ในทางกฎหมาย สัญญาอนุญาตแต่ละประเภทกำหนดเงื่อนไข ข้อผูกพัน และขอบเขตการใช้งานที่แตกต่างกันอย่างชัดเจน การเลือกใช้สัญญาอนุญาตที่ไม่เหมาะสมกับบริบทของโปรเจกต์ เป็นจุดเริ่มต้นของปัญหาทางกฎหมายที่พบได้บ่อยในระบบนิเวศซอฟต์แวร์

สัญญาอนุญาตแบบเปิด (Permissive License) เช่น MIT, BSD และ Apache License 2.0 อนุญาตให้นำซอร์สโค้ดไปใช้ แก้ไข และแจกจ่ายต่อได้อย่างอิสระ โดยข้อกำหนดหลักมักเป็นเพียงการระบุแหล่งที่มาและคำปฏิเสธความรับผิด ส่วนสัญญาอนุญาตแบบ copyleft เช่น GNU General Public License (GPL) ใช้กลไกบังคับให้งานดัดแปลงที่ถูกแจกจ่ายต้องใช้สัญญาอนุญาตเดียวกัน ซึ่งสร้างสิ่งที่เรียกกันว่า “copyleft ติดเชื้อ” (viral effect) ต่อโค้ดที่นำไปผสม

Permissive กับ Copyleft: ความแตกต่างที่ส่งผลต่อการเลือกใช้

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

ใบอนุญาตเฉพาะทางที่มักถูกเข้าใจผิด

นอกจากสองกลุ่มหลักข้างต้น ยังมีสัญญาอนุญาตเฉพาะทางที่นักพัฒนาจำนวนมากตีความผิดอยู่เสมอ GNU Lesser General Public License (LGPL) ถูกออกแบบมาเพื่อไลบรารีที่ต้องการให้นำไปเชื่อมต่อกับซอฟต์แวร์เชิงพาณิชย์ได้ แต่กฎเกณฑ์การเชื่อมต่อแบบ “static linking” มีรายละเอียดที่ต้องพิจารณา ขณะที่ Mozilla Public License 2.0 (MPL 2.0) เป็น copyleft ระดับไฟล์ (file-level copyleft) ซึ่งต่างจาก GPL ที่เป็น copyleft ระดับโปรเจกต์ การรวมไฟล์ MPL เข้ากับโปรเจกต์ขนาดใหญ่จึงไม่จำเป็นต้องเปิดเผยไฟล์อื่นที่ไม่เกี่ยวข้อง

อีกหนึ่งสัญญาอนุญาตที่สร้างความสับสนมากที่สุดคือ GNU Affero General Public License (AGPL) ซึ่งขยายขอบเขตของ GPL ให้ครอบคลุมการให้บริการผ่านเครือข่าย (network use) องค์กรจำนวนมากที่ให้บริการ SaaS มองข้ามข้อนี้ และค้นพบในภายหลังว่าการรันซอฟต์แวร์ AGPL บนเซิร์ฟเวอร์โดยไม่เปิดเผยการแก้ไข ถือเป็นการละเมิดเงื่อนไขของสัญญาอนุญาต

ข้อผิดพลาดในการจัดการไฟล์สัญญาอนุญาตภายในโปรเจกต์

ปัญหาที่พบบ่อยที่สุดอย่างหนึ่งในโปรเจกต์โอเพนซอร์สคือการจัดการไฟล์สัญญาอนุญาตที่ไม่สมบูรณ์ แม้จะดูเป็นเรื่องเล็กน้อย แต่มีผลกระทบโดยตรงต่อสถานะทางกฎหมายของซอฟต์แวร์ การที่โปรเจกต์ไม่มีไฟล์ LICENSE หรือ COPYING ในรูทของ repository ทำให้ผู้ใช้ไม่สามารถทราบได้ว่าสามารถใช้งานซอร์สโค้ดภายใต้เงื่อนไขใด ในหลายกรณี ทีมพัฒนาคัดลอกโค้ดจากโปรเจกต์อื่นและลืมตรวจสอบว่าซอร์สโค้ดต้นทางมีข้อกำหนดเพิ่มเติมหรือไม่

ข้อผิดพลาดที่พบซ้ำๆ ได้แก่ การลบข้อความลิขสิทธิ์ (copyright notice) ออกจากไฟล์ต้นฉบับ การไม่ระบุเครดิตให้กับผู้สร้างเดิม การลบคำปฏิเสธความรับผิด (disclaimer) ออกจากส่วนหัวของไฟล์ และการแก้ไขข้อความสัญญาอนุญาตให้สั้นลงโดยไม่ทราบว่าการกระทำดังกล่าวอาจทำให้สัญญาอนุญาตต้นฉบับไม่มีผลบังคับใช้ สัญญาอนุญาตโอเพนซอร์สจำนวนมากระบุชัดเจนว่าการลบหรือแก้ไขข้อความต้นฉบับถือเป็นการละเมิดข้อตกลง

การระบุเครดิตและการแจ้งการเปลี่ยนแปลง

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

ปัญหาความเข้ากันได้เมื่อผสมโค้ดจากหลายแหล่ง

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

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

สัญญาอนุญาต A สัญญาอนุญาต B สามารถผสมได้หรือไม่ หมายเหตุ
MIT GPL v2 / v3 ได้ ผลลัพธ์ต้องใช้ GPL
Apache 2.0 GPL v3 ได้ (ทางเดียว) Apache สามารถนำไปใช้ในโปรเจกต์ GPL v3 ได้
Apache 2.0 GPL v2 ไม่ได้ ข้อกำหนดสิทธิบัตรขัดแย้งกัน
MPL 2.0 GPL v3 ได้ MPL เป็น file-level copyleft
LGPL โปรเจกต์ proprietary ได้ (พร้อมเงื่อนไข) ต้องเปิดเผยการเปลี่ยนแปลงไลบรารี

การตัดสินใจว่าจะใช้สัญญาอนุญาตใดในการเผยแพร่ผลงานที่รวมโค้ดจากหลายแหล่ง จำเป็นต้องพิจารณาทั้งทิศทางของการผสม (one-way หรือ two-way) และผลกระทบของ copyleft ที่จะแผ่ไปยังไฟล์อื่นในโปรเจกต์ หากต้องการผสมโค้ด GPL เข้ากับโปรเจกต์เชิงพาณิชย์ มักจำเป็นต้องแยกการเชื่อมต่อผ่านกลไกเช่น plugin หรือ IPC เพื่อหลีกเลี่ยงการกระตุ้นข้อกำหนด copyleft

การใช้งานโอเพนซอร์สในเชิงพาณิชย์ที่มักถูกตีความผิด

ความเข้าใจผิดที่แพร่หลายที่สุดข้อหนึ่งคือ “ซอฟต์แวร์โอเพนซอร์สสามารถนำไปขายต่อได้โดยไม่มีข้อจำกัด” แม้ในทางเทคนิค สัญญาอนุญาตหลายฉบับอนุญาตให้ขายซอฟต์แวร์ที่นำไปแจกจ่ายต่อได้ แต่การขายนั้นไม่ได้ยกเลิกภาระผูกพันที่ผู้ขายต้องปฏิบัติตาม ตัวอย่างเช่น การนำซอฟต์แวร์ GPL ไปจำหน่ายในรูปแบบ physical media หรือ bundled กับฮาร์ดแวร์ ผู้จำหน่ายยังคงต้องให้ซอร์สโค้ดที่สมบูรณ์แก่ผู้ซื้อ และต้องคงข้อความลิขสิทธิ์ไว้ครบถ้วน

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

เครื่องหมายการค้าและชื่อโปรเจกต์

ประเด็นที่มักถูกสับสนกับสัญญาอนุญาตโอเพนซอร์สคือเรื่องเครื่องหมายการค้า (trademark) สัญญาอนุญาตโอเพนซอร์สควบคุมเฉพาะการใช้ซอร์สโค้ดและงานที่ดัดแปลง แต่ไม่ได้ให้สิทธิ์ในการใช้ชื่อโปรเจกต์ โลโก้ หรือเครื่องหมายการค้าของโปรเจกต์นั้นโดยอัตโนมัติ ตัวอย่างเช่น การ fork โปรเจกต์ใดโปรเจกต์หนึ่งและใช้ชื่อเดิมพร้อมโลโก้เดิม อาจก่อให้เกิดปัญหาเรื่องเครื่องหมายการค้าได้ แม้การใช้ซอร์สโค้ดจะถูกต้องตามสัญญาอนุญาตก็ตาม องค์กรที่ต้องการใช้งานโอเพนซอร์สในเชิงพาณิชย์จึงควรตรวจสอบนโยบายเครื่องหมายการค้า (trademark policy) แยกต่างหากจากสัญญาอนุญาต

แนวทางปฏิบัติที่ดีในการจัดการสัญญาอนุญาตในองค์กร

การจัดการสัญญาอนุญาตอย่างเป็นระบบเป็นส่วนสำคัญของการกำกับดูแลซอฟต์แวร์ (software governance) องค์กรที่ใช้งานโอเพนซอร์สในระดับองค์กรควรกำหนดนโยบายที่ชัดเจน ตั้งแต่ขั้นตอนการคัดเลือก dependency ไปจนถึงการตรวจสอบก่อนการ release ขั้นตอนแรกคือการจัดทำ Software Bill of Materials (SBOM) ซึ่งเป็นเอกสารที่ระบุรายการ component ทั้งหมดที่ใช้ในผลิตภัณฑ์ พร้อมเวอร์ชันและสัญญาอนุญาตของแต่ละ component SBOM มีความสำคัญอย่างยิ่งในการตรวจสอบย้อนกลับเมื่อเกิดปัญหาด้านความปลอดภัยหรือการละเมิดสัญญาอนุญาต

ขั้นตอนต่อมาคือการใช้เครื่องมือสแกนสัญญาอนุญาตอัตโนมัติในขั้นตอน CI/CD pipeline การบูรณาการเครื่องมืออย่าง ScanCode, ClearlyDefined หรือ reuse ของ Linux Foundation เข้ากับกระบวนการ build ช่วยให้ทีมพัฒนาทราบทันทีเมื่อมี dependency ใหม่ที่อาจก่อให้เกิดปัญหาด้านสัญญาอนุญาต และสามารถตัดสินใจทดแทนก่อนที่จะถูกผสานเข้าสู่ codebase

การฝึกอบรมและการสร้างวัฒนธรรมความ透明

เครื่องมือไม่สามารถทดแทนความเข้าใจของนักพัฒนาได้ทั้งหมด องค์กรควรจัดให้มีการฝึกอบรมเกี่ยวกับสัญญาอนุญาตโอเพนซอร์สเป็นประจำ โดยเฉพาะสำหรับนักพัฒนาใหม่ การสร้าง internal playbook ที่ระบุว่าสัญญาอนุญาตใดได้รับอนุญาต สัญญาอนุญาตใดต้องขออนุมัติ และสัญญาอนุญาตใดห้ามใช้ ช่วยลดความเสี่ยงในการตัดสินใจผิดพลาด นอกจากนี้ การจัดให้มี Open Source Program Office (OSPO) หรือผู้ประสานงานด้านโอเพนซอร์ส จะช่วยให้การจัดการสัญญาอนุญาตเป็นไปอย่างเป็นระบบและสอดคล้องกันทั่วทั้งองค์กร

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