“ GPL ที่มีข้อยกเว้น classpath” หมายถึงอะไรในทางปฏิบัติ


69

ออราเคิลดูเหมือนว่าจะอนุญาตให้ใช้รหัสเปิดแหล่งที่มาของพวกเขาทั้งหมดที่เกี่ยวข้องกับ Java ภายใต้GPL มีข้อยกเว้น จากสิ่งที่ฉันเข้าใจดูเหมือนว่าจะอนุญาตให้รวมไลบรารีเหล่านี้เข้ากับโค้ดของคุณเองเข้ากับผลิตภัณฑ์ที่ GPL ไม่ต้องครอบคลุม

  1. มันทำงานอย่างไร
  2. ตัวอย่างอะไรบ้างที่ฉันสามารถและไม่สามารถใช้คลาสเหล่านี้ได้?
  3. เหตุใดใบอนุญาตใหม่นี้จึงถูกใช้แทน LGPL ซึ่งดูเหมือนว่าจะอนุญาตในสิ่งเดียวกัน แต่ค่อนข้างเป็นที่ยอมรับและเข้าใจดีกว่า
  4. LGPL แตกต่างกันอย่างไร?

1
ฉันพบสิ่งนี้ในวิกิพีเดีย: en.wikipedia.org/wiki/…ซึ่งจะกำจัดสิ่งต่าง ๆ ออกไปเล็กน้อย แต่ฉันก็ยังไม่เข้าใจว่าทำไมบางคนถึงใช้สิ่งนี้ผ่าน LGPL คำถามที่ดี!

1
หน้า Wikipedia นั้นไม่ได้พูดถึงสิ่งต่าง ๆ เช่น "ผู้ใช้จะต้องสามารถแลกเปลี่ยนไลบรารี่กับเวอร์ชั่นของเขาเอง" ซึ่งเป็นบทบัญญัติของ LGPL ดังนั้นข้อยกเว้น GPL + อาจไม่จำเป็นต้องทำเช่นนั้น?
Thilo

1
อ่านบนที่ดูเหมือนจะเป็นกรณีที่ "แอลจีกำหนดความต้องการมากขึ้นในการยกเว้นการเชื่อมโยง: คุณต้องอนุญาตให้มีการปรับเปลี่ยนบางส่วนของห้องสมุดที่คุณใช้และวิศวกรรมย้อนกลับ (ของโปรแกรมและห้องสมุดของคุณ) สำหรับการดีบักการปรับเปลี่ยนดังกล่าว"
Thilo

ในกรณีนี้ฉันไม่ได้รับอนุญาตให้ทำอะไรภายใต้ใบอนุญาตนี้ ฉันสามารถคัดลอกรหัสลิขสิทธิ์ (เลือก + เลือกชั้นเรียน) ลงใน codebase ของฉันเอง (ไม่เปลี่ยนหลักสูตร) ​​ได้ไหม? ฉันสามารถใช้เครื่องมือสร้างอัตโนมัติเพื่อแก้ไขไบนารีที่ได้หรือไม่ ผู้ Obfuscators, minimizers, ระบำรหัสตายหรือไม่
Thilo

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

คำตอบ:


69

ก่อนอื่นฉันไม่ใช่ทนายความ แต่ฉันได้ศึกษาใบอนุญาตจำนวนมากและเข้าใจปัญหาที่เกี่ยวข้องกับพวกเขา

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

(L) GPL เขียนด้วย C / C ++ ในใจโชคไม่ดี มันพูดถึง "ซอร์สโค้ด", "รหัสวัตถุ", "การเชื่อมโยงแบบไดนามิก", "การเชื่อมโยงแบบคงที่", "คอมไพเลอร์" และ "ล่ามรหัสวัตถุ" ดังนั้นการแปลภาษานี้สำหรับภาษาอื่น ๆ ที่ไม่เป็นไปตามเทคนิคการคอมไพล์เดียวกัน (เช่น bytecode ของ Java, การรวบรวมทันเวลาของ Python หรือการตีความตามธรรมชาติของ Javascript) ต้องมีการคาดเดาและสมมติฐาน เมื่อคุณกำลังพูดถึงกฎหมาย - เช่นการพิจารณาคดีในที่สุดศาลที่ทั้งสองฝ่ายโต้เถียงกัน - การไม่มีความแตกต่างที่ชัดเจนเป็นสิ่งที่ไม่ดี

มาตรฐานรหัสลิขสิทธิ์ GPL นั้นค่อนข้างตรงไปตรงมาโดยเจตนา ทุกคนที่ใช้รหัสนั้นจะต้องปล่อยรหัสของพวกเขาให้กับผู้ใช้ทุกคนเมื่อพวกเขาแจกจ่ายหรือขายมัน นั่นคือไวรัส GPL ที่ Richard Stallman ต้องการสร้างและทำอย่างชัดเจนและเรียบร้อย

LGPL เดิมเป็นความพยายามที่จะอนุญาตให้ "ห้องสมุด" ที่ไม่เป็นไวรัส แต่พวกเขายังต้องการให้ผู้ใช้ปลายทางสามารถแทนที่ไลบรารีด้วยตนเองได้ดังนั้นความแตกต่างระหว่างการเชื่อมโยง "แบบคงที่" และ "แบบไดนามิก" - ผู้ใช้สามารถสลับไปยังไลบรารีที่เชื่อมโยงแบบไดนามิกที่แตกต่างกันดังนั้นจึงไม่จำเป็น ได้รับใบอนุญาตเป็น GPL และลิงก์แบบคงที่ต้องการให้ผู้ใช้เป็น GPL ใบอนุญาตพูดถึง "ไฟล์ส่วนหัว" ซึ่งชัดเจนใน C / C ++ แต่เห็นได้ชัดว่าไม่ชัดเจนเมื่อคุณอยู่ในโลกของ Java, Python, Javascript และอื่น ๆ ดังนั้น L ("ไลบรารี่") ของสิ่งที่แอลจีแอลจึงเป็นสิ่งที่ดีที่สุด

นี่เป็นประเด็นสำคัญของเรื่องนี้ สิ่งที่ไม่ชัดเจนคือ BAD ในโลกแห่งกฎหมาย หากฉันกำลังมองหาบางสิ่งบางอย่างที่ใช้องค์ประกอบ GPL หรือ LGPL ฉันต้องการให้แน่ใจว่าสถานะทางกฎหมายของฉันคืออะไรในอนาคตหากฉันลงจอดในศาล แต่ ณ วันนี้ฉันไม่แน่ใจเพราะยังไม่มีคดีในศาลที่ดีที่สร้างแบบอย่างทางกฎหมายมีเพียงข้อโต้แย้งทางปัญญาในฟอรัมเช่นนี้เท่านั้น

ที่นี่เป็นที่ที่การยกเว้น Classpath มีค่า มันชัดเจนระบุว่ารหัสภายใต้ใบอนุญาตคือ (L) GPL แต่สิ่งที่ใช้รหัสนั้นสามารถปฏิบัติตามสิ่งที่พวกเขาต้องการใบอนุญาต ไม่ใช่แค่ ifs, ands หรือ buts หากคุณเปลี่ยนรหัสหลัก (เช่นการแก้ไขข้อบกพร่อง) คุณยังต้องปล่อยการเปลี่ยนแปลงเหล่านั้นโดยเป็นส่วนหนึ่งของ GPL แต่การใช้ไม่ได้ทำให้คุณติดเชื้อ

จากมุมมองทางธุรกิจฉันเข้าใจว่าทำไมบางคนไม่ต้องการแตะรหัส GPL ด้วยโพล 10 ' สถานะทางกฎหมายนั้นไม่ชัดเจนและธุรกิจอาจติดอยู่ในทศวรรษนี้เมื่อมีการตั้งตัวอย่างทางกฎหมายในที่สุด หรือพวกเขาอาจติดอยู่ในศาลเป็นเวลาหลายปีเพื่อต่อสู้เพื่อสร้างแบบอย่างทางกฎหมาย ไม่ว่าพวกเขาเพียงแค่ไม่ต้องการเสี่ยงต้นทุนของการต่อสู้นั้น การเพิ่มข้อยกเว้น Classpath กำจัดคำถามทางกฎหมายและหลีกเลี่ยงคดีในศาลที่อาจเกิดขึ้น (ร้ายแรง)

สำหรับฉันแล้ว Classpath Exception นั้นแตกต่างจาก LGPL มาก มันเป็นวิธีที่สะอาดถูกต้องตามกฎหมายในการวาดเส้นสว่างที่อนุญาตให้ใช้รหัสต้นฉบับหรือไลบรารี GPL หรือ LGPL ที่ไม่ใช่ GPL


21
IANAL แต่ฉันเป็นหนึ่งในผู้สร้างข้อยกเว้น Classpath และนี่คือคำตอบที่ถูกต้อง ข้อยกเว้นถูกสร้างขึ้นเพื่อรองรับกรณีการใช้งานแบบฝังที่รวบรวมโดย AOT ซึ่งนักพัฒนาจะทำการเชื่อมโยงไบนารีแบบคงที่ (กับ gcj ในกรณีของเรา) เราต้องการบางสิ่งเช่นใบอนุญาต libgcc ดังนั้นฉันจึงเขียนรุ่นแรกของข้อยกเว้น Classpath ตามนั้น มันได้ครบกำหนดแล้ว แต่วิญญาณเหมือนกัน
Anthony Green

6

GPL ที่มีข้อยกเว้น classpath ทำงานเช่น LGPL สำหรับการใช้งานส่วนใหญ่

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


-3

ดูเหมือนว่าสิทธิ์การใช้งานสไตล์ "GPL พร้อมข้อยกเว้นคลาสพา ธ " อาจเก่ากว่า LGPL

อาจเป็นเหตุผลเดียวที่ทุกคนยังคงใช้เพราะรหัส GPL ไม่สามารถย้ายไปยังรหัส LGPL โดยไม่ได้รับอนุญาตเป็นลายลักษณ์อักษรจากทุกคนที่เคยมีส่วนร่วมกับรหัส


7
LGPL รุ่นแรกได้เปิดตัวในปีพ. ศ. 2534 en.wikipedia.org/wiki/LGPL
Thilo

มันลงวันที่ก่อนวันจริงจาวา แต่มันลงวันที่ก่อนหน้ารหัสทั้งหมดใน Java? บางทีรุ่นแรกของ Java มีรหัสจากบางโครงการ "GPL กับ classpath" ที่เก่ากว่า
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.