Open source

ผมเป็นโปรแกรมเมอร์มาเกือบ 40 ปี ทำอย่างอื่นไม่เป็นแล้ว ทำอยู่อย่างเดียว ความสำเร็จก็พอมี ความล้มเหลวก็มาก บาดแผลเต็มตัว

หากทำซอฟต์แวร์ออกนอกบ้านเมื่อไร ปัญหาข้อกฎหมายจะตามมาเสมอ หลายวันนี้เห็นมีข้อถกเถียงกันเรื่อง Open source จึงขอเขียนถึง ไม่ต้องการดราม่าอะไรนะครับ แค่อยากแชร์ประสบการณ์

บาดแผลเจ็บตัวหลายครั้ง มักเกิดจากวัยหนุ่มที่คิดว่า “ไม่ต้องตีความมาก”, “ไม่ต้องสนใจ” ทำให้เกิดปัญหามากมายตามมา บางครั้งแทบเอาตัวไม่รอด

มีสองคำที่ต้องอธิบายคือ “Free Software” และ “Open source” เนื่องจากเป็นคำสามัญทำให้คิดว่าไม่มีความหมายใดๆนอกจากการแปลตรงตัว จริงๆแล้ว เราเป็นส่วนหนึ่งของสังคมโลก มีข้อกำหนดที่คนอื่นกำหนดไว้ หากเราต้องพึ่งพาใช้สิ่งที่คนอื่นร่วมสร้าง เราก็ควรเคารพในกติกาที่คนเหล่านั้นตกลงกันไว้ เพื่อไม่ให้มีปัญหาทั้งในเชิงสังคม, จริยธรรม และการละเมิดกฎหมาย

คำว่า “Free Software” เป็นการรณรงค์เพื่อการใช้คอมพิวเตอร์อย่างเสรี Free หมายถึง Freedom (Libre ในภาษาฝรั่งเศส) ไม่ใช่ Free ที่แปลว่าไม่ต้องจ่ายเงิน จึงมักพูดว่า “Free as freedom not free beer”

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

การรณรงค์นี้เพื่อให้เกิดความร่วมมือกันพัฒนาซอฟต์แวร์ ไม่ติดขัดด้วยข้อกฎหมายเชิงลิขสิทธิ์และสิทธิบัตร

ส่วนคำว่า Open source เป็นหลักการทำงานที่ได้ตกลงกันไว้ในเชิงของสัญญาอนุญาติใช้ ว่าการแก้ไขดัดแปลงและการแจกจ่ายงานต่อไปนั้น ผู้ใช้มีสิทธิมากน้อย และมีหลักปฎิบัติอย่างไร

Open source จีงเป็นคำที่ “อ่อน” ว่า Free software เพราะไม่ใช่การรณรงค์เพื่อการใช้อย่างเสรี เพราะยากที่จะประยุกต์ใช้ได้กับทุกองค์กรหรือบริษัทที่ไม่สามารถเสรีในทุกเรื่อง

ยกตัวอย่างชัดๆ คือ Android เป็น Open source แต่ไม่ใช่ Free Software

แน่นอนว่าการเปิดเผยซอร์สโค๊ดคือส่วนสำคัญของทั้ง Fee Software และ Open source แต่ไม่ใช่ทั้งหมด ความสำคัญอยู่ที่ข้อผูกพันธ์ทางกฎหมายที่มีอยู่กับ source code นั้นๆด้วย

สัญญาอนุญาตใช้แบ่งเป็น 2 พวกใหญ่ๆ คือ

1. Copyleft license คือ งานที่แก้ไขดัดแปลงต้องคงสัญญาอนุญาตใช้ไว้เหมือนงานต้นฉบับทุกประการ ไม่ว่าจะทำไปกี่ทอดก็ตาม

2. Non-copyleft license คือ งานที่เชื่อมต่อไม่จำเป็นต้องคงสัญญาอนุญาตไว้ จะทำเป็น proprietary หรือ close source ได้ตามต้องการ

สัญญาที่ควรรู้จักมีดังนี้

GPL (General Public License) เป็นประเภท copyleft เมื่อดัดแปลงแก้ไขแล้ว หากแจกจ่ายผลงานเมื่อไร ต้องเปิดเผย source code เมื่อนั้น มี v2 และ v3 โดย v3 สำหรับงาน embedded บังคับเพิ่มว่าต้องรันบน device ที่ต้นแบบนั้นๆรันได้ด้วย

LGPL (Lesser GPL) เป็น copyleft เช่นกัน สำหรับงานที่เป็น library หากงานของเราแค่เรียกใช้ library แบบ dynamic เราไม่จำเป็นต้องเปิด source code ของงานที่เรียกใช้ ยกเว้น link static หรือ ดัดแปลงตัว library ต้องเปิด source

สัญญาอื่นๆเช่น Apache, BSD, MIT, X11 เป็น non-copyleft

** แก้ไข *** ขอบคุณ Art Suriyawongkul

แก้ไขนิดหนึ่งครับ ทั้ง Apache, 2-clause BSD, 3-clause BSD, MIT/X11 license แม้จะเป็น non-copyleft (หรือเรียกว่า permissive license) แต่การแจกจ่ายยังต้องคง(สืบทอด)สัญญาอนุญาตต้นฉบับไว้ครับ

ที่สัญญาอนุญาตเหล่านั้นแตกต่างจาก GPL ตรงที่ ตัวส่วนขยายใดๆ หรือชิ้นส่วนใดๆ ที่มาสัมผัสกับตัวโค้ดที่เป็น permissive license นี้ ชิ้นส่วนพวกนั้น ไม่จำเป็นต้องเปลี่ยนสัญญาอนุญาตตาม (ในขณะที่ ถ้าเราเอาโค้ดอะไรก็ตามไปเชื่อมกับโค้ด GPL, โค้ดนั้นต้องเปลี่ยนเป็น GPL ด้วย)

การใช้ opensource ต้องคำนึงนะครับว่าต้นตอของซอฟต์แวร์ที่เราเอามาดัดแปลงแก้ไขมีสัญญาอนุญาตอย่างไร มีการฟ้องร้องเกิดขึ้นมากมาย และรังแต่จะทำให้เสียเวลา เสียเงิน

ดังนั้นเรื่องพวกนี้ต้องตีความ ต้องเข้าใจครับ เขียนด้วยความปรารถนาดีนะครับ ไม่ได้ต้องการดราม่าใดๆ