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

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

ประเภทและข้อผิดพลาดในการเลือกสัญญาอนุญาต

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

โปรเจกต์โอเพนซอร์สส่วนใหญ่ใช้สัญญาอนุญาตมาตรฐานที่ได้รับการยอมรับในระดับสากล เช่น MIT, BSD, Apache 2.0, GPLv3, Mozilla Public License 2.0 หรือ ISC แต่ละสัญญามีจุดประสงค์และข้อจำกัดต่างกัน การทำความเข้าใจความแตกต่างเหล่านี้ช่วยให้นักพัฒนาหลีกเลี่ยงข้อพิพาททางกฎหมายที่อาจเกิดขึ้นในภายหลัง โดยเฉพาะอย่างยิ่งเมื่อต้องนำไลบรารีหลายตัวมาประกอบกันในโปรเจกต์เดียว

Permissive กับ Copyleft ต่างกันอย่างไร

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

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

กรณีศึกษา: AGPL กับบริการ SaaS

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

สัญญาอนุญาต ประเภท ใช้ในเชิงพาณิชย์ได้ ต้องเปิดเผยซอร์สโค้ด
MIT Permissive ได้ ไม่จำเป็น
BSD-3-Clause Permissive ได้ ไม่จำเป็น
Apache 2.0 Permissive ได้ ไม่จำเป็น (ต้องระบุการเปลี่ยนแปลง)
GPLv3 Copyleft ได้ จำเป็นเมื่อเผยแพร่
LGPLv3 Weak Copyleft ได้ เฉพาะส่วนที่แก้ไข
AGPLv3 Network Copyleft ได้ จำเป็นแม้ใช้บนเซิร์ฟเวอร์

หน้าที่ที่ผู้ใช้มักละเลยเมื่อนำไปใช้งาน

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

การระบุแหล่งที่มาและการคงไว้ซึ่งข้อความลิขสิทธิ์

สัญญาอนุญาตแทบทุกฉบับกำหนดให้ผู้ใช้คงไว้ซึ่งข้อความลิขสิทธิ์ (Copyright Notice) และคำปฏิเสธความรับผิด (Disclaimer) ในการเผยแพร่ทุกครั้ง หมายความว่าเมื่อนำไลบรารีไปจัดจำหน่ายหรือเผยแพร่ ไฟล์ต้นฉบับที่มีข้อความ Copyright (c) [ปี] [ผู้สร้าง] ต้องติดมาด้วย ข้อผิดพลาดที่พบบ่อยในแอปพลิเคชันมือถือคือการลบไฟล์ LICENSE หรือ NOTICE ออกจากบิลด์เพื่อลดขนาดไฟล์ ซึ่งทำให้ผู้ใช้แอปไม่สามารถตรวจสอบสัญญาอนุญาตของไลบรารีที่ใช้ได้ การแก้ปัญหานี้ทำได้ง่ายๆ ด้วยการแสดงหน้า “Open Source Licenses” ในแอป ซึ่งเป็นมาตรฐานที่แอปส่วนใหญ่ปฏิบัติตามอยู่แล้ว

การเปิดเผยการเปลี่ยนแปลง

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

การเปิดเผยซอร์สโค้ดเมื่อใช้สัญญา Copyleft

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

More Articles