เทคโนโลยีโดย milo อ่าน 5 นาทีเรียบเรียงโดยมี AI ช่วย

ตรวจสอบไลเซนส์โอเพ่นซอร์สบน Linux ด้วยเครื่องมือฟรี (คู่มือสำหรับ Maintainer มือใหม่)

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

สารบัญ

คุณเคยดึงไลบรารีจาก npm, PyPI หรือ Composer มาใช้ในโปรเจกต์โดยไม่ได้สนใจไลเซนส์บ้างไหม? บอกเลยว่านี่คือกับระเบิดเวลาที่รอลุกเป็นไฟ โดยเฉพาะถ้าคุณกำลังจะทำโปรเจกต์เป็นธุรกิจ การนำโค้ดที่มีไลเซนส์แบบ Copyleft (เช่น GPL) ไปผสมกับโปรเจกต์ที่ต้องการความเป็นส่วนตัว อาจทำให้คุณต้องเปิดเผยซอร์สโค้ดทั้งหมดตามกฎหมาย

บทความนี้จะพาคุณผู้ที่เพิ่งเป็น Maintainer มาเรียนรู้วิธีตรวจสอบไลเซนส์ของ Dependency ต่างๆ ในโปรเจกต์ ด้วยเครื่องมือฟรีบน Linux เพื่อความสบายใจก่อนปล่อยของสู่สาธารณะ

ทำไม Maintainer ต้องรู้เรื่องไลเซนส์?

หลายคนเข้าใจว่าโอเพ่นซอร์สคือของฟรี ใช้ได้ทุกอย่าง แต่ความจริงคือ "ฟรี" ในที่นี้หมายถึงเสรีภาพ ไม่ใช่ฟรีในแง่ราคา ไลเซนส์แต่ละประเภทมีเงื่อนไขที่ต่างกันออกไป เช่น:

  • MIT / Apache 2.0: ใช้งานได้ฟรี แก้ไขได้ ทำเป็นการค้าได้ ขอแค่ระบุชื่อผู้สร้างเดิม
  • GPL: หากคุณดัดแปลงและแจกจ่ายโปรแกรมต่อ โปรแกรมของคุณต้องใช้ไลเซนส์ GPL เช่นเดียวกัน และต้องเปิดเผยซอร์สโค้ดด้วย
  • BSD: คล้าย MIT แต่บางเวอร์ชันห้ามใช้ชื่อผู้สร้างเดิมในการโปรโมท

หากคุณเป็น Maintainer การปล่อยให้โค้ดที่มีไลเซนส์ไม่เข้ากันอยู่ในโปรเจกต์ อาจนำไปสู่การถูกฟ้องร้อง หรือทำให้โปรเจกต์ที่ตั้งใจจะทำเป็น Proprietary ต้องกลายเป็น Open Source ไปโดยปริยาย

เครื่องมือฟรีที่ควรมีติดเครื่อง Linux

บน Linux มีเครื่องมือหลายตัวที่ช่วยสแกนไลเซนส์ได้โดยไม่ต้องเสียเงิน แต่ละตัวมีจุดเด่นต่างกัน ขอแนะนำ 2 ตัวที่ใช้ง่ายและทรงพลังที่สุด

1. licensecheck (เร็ว กระชับ เช็คด่วน)

เป็นเครื่องมือบน Command Line ที่ตรวจสอบไฟล์ในโปรเจกต์ของคุณว่ามีการประกาศไลเซนส์อะไรบ้าง มักใช้เช็คไฟล์ซอร์สโค้ดหลักหรือไฟล์ LICENSE ว่าตรงกับมาตรฐาน SPDX หรือไม่

วิธีติดตั้ง (Ubuntu/Debian):

sudo apt update
sudo apt install licensecheck

วิธีใช้งาน:

licensecheck --copyright --lines 0 ./

ผลลัพธ์จะแสดงรายชื่อไฟล์พร้อมไลเซนส์ที่ตรวจพบ เช่น:

./src/main.py: MIT
./src/utils.py: GPL-2.0

หากเจอไฟล์ที่มีไลเซนส์ขัดแย้งกับโปรเจกต์หลัก คุณจะเห็นได้ทันที

2. scancode-toolkit (ละเอียด ลึกลงไปในทุก Dependency)

หากคุณต้องการเช็คลึกถึงระดับ Dependency ที่ถูกดึงมาจากแพ็กเกจภายนอก scancode-toolkit คือคำตอบ มันสามารถสแกนโค้ด ตรวจหาไลเซนส์ ลิขสิทธิ์ และแพ็กเกจที่ซ่อนอยู่ได้อย่างครบถ้วน

วิธีติดตั้ง (ใช้ pip):

pip install scancode-toolkit

วิธีใช้งานเบื้องต้น:

scancode --license --copyright --info ./my_project --output scan_result.json

คำสั่งนี้จะสแกนโฟลเดอร์ my_project และสร้างไฟล์ scan_result.json ที่สรุปรายละเอียดไลเซนส์ทั้งหมดในรูปแบบ JSON ที่อ่านง่ายและนำไปประมวลผลต่อได้

มือใหม่เริ่มต้นใช้ยังไง? มาลองกัน

สมมติว่าคุณมีโปรเจกต์ Node.js ที่ใช้ Express และมีไลบรารีอื่นๆ อีกมากมาย คุณต้องการตรวจสอบว่ามีไลเซนส์ตัวไหนที่เป็น GPL หรือ AGPL หรือไม่

  1. ติดตั้ง scancode-toolkit ตามขั้นตอนด้านบน
  2. รันคำสั่งสแกน:
scancode --license --only-findings ./node_modules --output licenses.json

(ธง --only-findings จะทำให้ไฟล์ผลลัพธ์เก็บเฉพาะข้อมูลที่พบว่ามีไลเซนส์เท่านั้น ทำให้ไฟล์เล็กลง)

  1. วิเคราะห์ผลลัพธ์: เปิดไฟล์ licenses.json หรือใช้คำสั่ง jq เพื่อกรองเฉพาะไลเซนส์ที่เป็นอันตราย
cat licenses.json | jq '.files[] | select(.licenses[].key | test("gpl|agpl")) | .path'

คำสั่งนี้จะแสดงเฉพาะ Path ของไฟล์ที่มีไลเซนส์เป็น GPL หรือ AGPL หากผลลัพธ์ว่าง แปลว่าโปรเจกต์ของคุณปลอดภัย!

เจอไลเซนส์ขัดแย้งกัน จะแก้ยังไง?

หากคุณสแกนแล้วพบว่ามี Dependency ที่มีไลเซนส์ไม่เข้ากับโปรเจกต์ของคุณ (เช่น โปรเจกต์คุณเป็น Proprietary แต่ดึงไลบรารี GPL มาใช้) ให้ทำตามขั้นตอนนี้:

  1. หาตัวทดแทน: ค้นหาไลบรารีที่ทำงานคล้ายกันแต่ใช้ไลเซนส์ที่ยืดหยุ่นกว่า เช่น MIT หรือ BSD
  2. ติดต่อผู้พัฒนา: บางครั้งผู้สร้างไลบรารีอาจยอมให้คุณใช้งานในเชิงพาณิชย์ได้ด้วยการซื้อ Commercial License แยกต่างหาก
  3. แยกส่วนโค้ด (Decoupling): หากจำเป็นต้องใช้ไลบรารีนั้นจริงๆ ให้แยกมันออกไปรันเป็น Microservice หรือโปรเซสแยก แล้วสื่อสารผ่าน API ซึ่งอาจช่วยหลีกเลี่ยงข้อกำหนดบางส่วนได้ (ควรปรึกษาทนายความเฉพาะทาง)

สรุป

การเป็น Maintainer ไม่ใช่แค่เขียนโค้ดให้ทำงานได้ แต่ต้องรู้จักดูแลสิทธิ์และข้อผูกพันของโค้ดที่เรานำมาใช้ด้วย เครื่องมืออย่าง licensecheck และ scancode-toolkit บน Linux คือเพื่อนคู่ใจที่จะช่วยลดภาระงานนี้ได้มาก ทำให้คุณสแกนได้เร็ว แม่นยำ และไม่ต้องเสียเงินซื้อ Enterprise Tool

พร้อมจะทำให้โปรเจกต์ของคุณปลอดภัยแล้วหรือยัง? ลองเปิด Terminal แล้วรันสแกนไลเซนส์ในโปรเจกต์ปัจจุบันของคุณดูเลย แล้วมาแชร์กันในคอมเมนต์ว่าเจอไลเซนส์แปลกๆ ตัวไหนใน Dependency บ้างไหม!

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

พบข้อมูลที่ไม่ถูกต้องหรือคลาดเคลื่อน?เข้าสู่ระบบเพื่อทักท้วง
บทความนี้เป็นอย่างไร?

ยังไม่มีความคิดเห็น — มาเป็นคนแรกกันเถอะ!