กฎการลิงก์ GPL คงที่เทียบกับแบบไดนามิกนำไปใช้กับภาษาที่ตีความได้อย่างไร


19

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

ดูเหมือนว่าจะง่ายเกินไปที่จะใช้ประโยชน์จากกฎหากถือว่าเป็นการเชื่อมโยงแบบไดนามิก แต่ในทางกลับกันก็ดูเหมือนว่าจะเป็นไปไม่ได้ที่จะอ้างอิงรหัส GPL ที่ถูกกฎหมายจากรหัสที่ไม่ใช่ GPL หากถือว่าเป็นแบบคงที่! ภาษาที่คอมไพล์อย่างน้อยมีความแตกต่างระหว่างการเชื่อมโยงแบบสแตติกและแบบไดนามิก แต่เมื่อ "การเชื่อมโยง" ทั้งหมดเป็นเพียงการเรียกใช้สคริปต์มันเป็นไปไม่ได้ที่จะบอกว่าเจตนาคืออะไรโดยไม่ได้รับอนุญาตอย่างชัดเจน!

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


คุณอ่านgnu.org/licenses/lgpl-java.html แล้วหรือยัง

2
@delnan lgpl! = gpl
โยฮันน์

คำตอบ:


16

สำหรับคำถามเฉพาะเกี่ยวกับภาษาที่แปลแล้วคำถามที่พบบ่อยเกี่ยวกับGPL นั้นชัดเจนมาก :

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

สำหรับคำถามทั่วไปเกี่ยวกับการเชื่อมโยงแบบไดนามิกและแบบคงที่ ก่อนอื่นมุมมองของ FSF และ Stallman คือมันไม่สำคัญว่าการเชื่อมโยงจะเป็นแบบคงที่หรือเป็นแบบไดนามิก GPL จะแพร่กระจายไปในทางใดทางหนึ่ง จากคำถามที่พบบ่อยของ FSF GPL:

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

และ

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

อย่างไรก็ตามนี่เป็นปัญหาจากมุมมองทางกฎหมาย ในกรณีเดียวที่จริงไปศาลเกี่ยวกับการเชื่อมโยงแบบไดนามิก - . Galoob วีนินเทน - ศาลอุทธรณ์วินิจฉัยว่ามาทำงาน"ต้องรวมเป็นส่วนหนึ่งของงานที่มีลิขสิทธิ์ในรูปแบบบางอย่าง" ซึ่งไม่ใช่กรณีที่มีการเชื่อมโยงแบบไดนามิก

อย่างไรก็ตามไม่ว่าการเชื่อมโยงแบบไดนามิกนั้นติดเชื้อจริงหรือไม่ มันใช้เป็นตัวอย่างโดย Nvidia เพื่อให้ไดรเวอร์ไบนารีสำหรับ Linux คุณสร้าง wrapper GPL (L) แต่ในฐานะผู้เขียนคุณได้รับอนุญาตให้เพิ่มข้อยกเว้นพิเศษเพื่อลิงก์กับแหล่งข้อมูลปิดเฉพาะ Vide FSF GPL คำถามที่พบบ่อย


ลักษณะอย่างหนึ่งของงานดัดแปลงคือไม่สามารถแยกงานต้นฉบับของเจ้าของลิขสิทธิ์ออกได้อย่างหมดจด หากบ๊อบFoo()มีการเชื่อมโยงแบบคงที่เพื่อโทรหาโจBar()ผู้ถือลิขสิทธิ์คนใดควรนำCALLคำสอนมาพิจารณาร่วมกัน การมีปฏิสัมพันธ์เช่นนี้จะเพียงพอที่จะเป็น "งานดัดแปลง" อย่างไรก็ตามหากงานของ Joe ยังคงอยู่ภายในไฟล์เดียวและ Bob ยังคงอยู่ภายในไฟล์อื่นทั้งหมดลักษณะที่ปรากฏของไฟล์เหล่านั้นในไดเรกทอรีต่าง ๆ ในดิสก์เดียวกันถือว่าเป็นการรวมตัวไม่ใช่การได้มา
supercat

2
@thepaul: มีความสำคัญทางกฎหมายอยู่แล้วซึ่งระบุว่าอย่างน้อยส่วนหนึ่งของงานที่มีลิขสิทธิ์จะต้องรวมอยู่ในงานเพื่อประกอบเป็นงานดัดแปลง ความเชื่อของสตอลแมนมักมีรากฐานที่แท้จริงในกฎหมายที่แท้จริงน้อยมาก
vartec

1
@thaul: ด้านหนึ่งคุณมีกฎหมายที่ บริษัท 9 พันล้านดอลลาร์ใช้ในการเรียกร้องอื่น ๆ โดยคนที่ชอบสวมหมวกเหล็กวิลาด คุณอ้างว่าภายหลังมีความน่าเชื่อถือมากขึ้นและคุณมีสิทธิ์ที่จะเชื่อ
vartec

1
คุณพูดในส่วนที่ไม่ถูกต้องของGPL คำถามที่พบบ่อยมีความชัดเจนมาก ส่วนที่คุณอ้างถึงนั้นเกี่ยวกับหากล่ามภาษาการเขียนโปรแกรมวางจำหน่ายภายใต้ GPL นั่นหมายความว่าโปรแกรมที่เขียนเพื่อตีความโดยจะต้องอยู่ภายใต้ลิขสิทธิ์ที่เข้ากันได้กับ GPL หรือไม่? ! ดังนั้นที่ [GPL ได้รับใบอนุญาต] ล่าม ส่วนที่เกี่ยวข้องเป็น 2 ย่อหน้าสุดท้าย: [... ] อีกกรณีที่คล้ายกันและที่พบบ่อยมากคือการจัดหาล่ามให้กับห้องสมุดซึ่งเป็นล่ามแปลภาษาเอง ตัวอย่างเช่น Perl มาพร้อมกับโมดูล Perl จำนวนมาก [... ]
Chris Wesseling

1
«โปรแกรมตีความให้ล่ามเป็นเพียงข้อมูล ใบอนุญาตซอฟต์แวร์ฟรีเช่น GPL ตามกฎหมายลิขสิทธิ์ไม่สามารถ จำกัด ข้อมูลที่คุณใช้ล่าม คุณสามารถรันบนข้อมูลใด ๆ (โปรแกรมแปล) ตามที่คุณต้องการและไม่มีข้อกำหนดเกี่ยวกับการอนุญาตให้ใช้ข้อมูลนั้นกับใคร»นี่เป็นเรื่องเกี่ยวกับการรันโปรแกรมในใบอนุญาตใด ๆ แม้จะเป็นล่าม GPL ใช่ไหม? ซึ่งไม่ครอบคลุมหัวข้อการใช้ปลั๊กอินที่ไม่ใช่ libre ในโปรแกรม GPL ในภาษาที่ตีความ
tuxayo

4

หมายเหตุ: นี่เป็นคำถามทางกฎหมาย Programmers.SE ไม่ใช่ฟอรัมกฎหมาย แต่เป็นฟอรัมการเขียนโปรแกรม ในขณะที่ผู้คนที่นี่รู้เรื่องการเขียนโปรแกรมค่อนข้างน้อยพวกเขาไม่รู้อะไรเลยเกี่ยวกับกฎหมาย หากคุณต้องการถามคำถามทางกฎหมายคุณควรถามในฟอรัมกฎหมายที่มีคนที่รู้เรื่องจริง


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

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

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

การตีความและการรวบรวมเป็นลักษณะของล่ามหรือคอมไพเลอร์ (duh!) ไม่ใช่ภาษา ทุกภาษาสามารถนำไปใช้กับล่ามและทุกภาษาสามารถนำไปใช้กับคอมไพเลอร์ ภาษาส่วนใหญ่มีทั้ง การใช้ภาษาที่ทันสมัยที่สุดส่วนใหญ่จะรวมทั้งสองอย่างไว้ในเอ็นจินการเรียกใช้งานเดียว

ยกตัวอย่างเช่น Rubinius Ruby Implementation มีคอมไพเลอร์แบบคงที่ล่วงหน้าซึ่งรวบรวมรหัส Ruby เป็นรหัสไบต์ Rubinius, ล่ามที่ตีความรหัสไบต์ Rubinius และคอมไพเลอร์ทันเวลาแบบไดนามิกซึ่งรวบรวมรหัสไบต์ Rubinius เป็น LLVM IR ซึ่งโครงสร้างพื้นฐาน LLVM นั้นจะคอมไพล์เป็นรหัสเครื่องดั้งเดิม MacRuby Ruby Implementation ไม่มีตัวแปลเลยมันรวบรวมรหัส Ruby ตรงไปที่ LLVM IR จากนั้นต่อรหัสเครื่องดั้งเดิม

ในทางตรงกันข้ามมีล่ามสำหรับ C หรือ C ++

ทั้งหมดนี้เป็นเพียงรายละเอียดทางเทคนิค ลิขสิทธิ์ไม่เกี่ยวข้องอย่างสมบูรณ์

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

คำถามคืองานมาจากงานอื่นหรือไม่ มันสามารถเชื่อมโยงแบบไดนามิกและยังคงได้รับและมันสามารถเชื่อมโยงแบบคงที่และไม่ได้มาเลย


สิ่งที่เกี่ยวกับการแปลภาษา "รหัสกลาง"? หนึ่งในหลักการที่อยู่เบื้องหลัง GPL คือทุกคนควรสามารถปรับโปรแกรมให้เข้ากับเครื่องจักรที่สมเหตุสมผลซึ่งมีเครื่องมือภาษาเดียวกันกับต้นฉบับ หากมีผู้เผยแพร่ซอร์สโค้ดสำหรับล่ามรหัสกลางพร้อมกับพวงของรหัสกลางที่สามารถทำงานได้จะมีกฎอะไรสำหรับการปล่อยข้อมูลที่เกี่ยวข้องกับ blob รหัสกลางนั้น ซึ่งแตกต่างจากไฟล์ประมวลผลที่คอมไพล์ซึ่งเป็นเครื่องเฉพาะ Blob รหัสกลางจะพกพาได้อย่างสมบูรณ์
supercat

ขออภัย; ฉันจะถาม stackoverflow.com และแนะนำให้ฉันถามที่นี่แทนเมื่อฉันใช้แท็ก "gpl"! การอภิปรายประเภทนี้ถูกแบนที่นี่ด้วยหรือไม่? exec ("killall -9 ทนายความ"); : D
ekolis

และใช่ฉันเห็นด้วยที่ไม่สมเหตุสมผลว่ารายละเอียดการดำเนินการไม่ควรมีผลกระทบต่อสถานะทางกฎหมายของการใช้ซ้ำ ฉันแค่คิดว่ามีความแตกต่างและขอคำชี้แจง!
ekolis

2
@ekolis: มันไม่ได้รับอนุญาตต่อ se มันเป็นเพียงแค่ว่ามันไม่ใช่ความคิดที่ดีที่จะถามคำถามทางกฎหมายของคนที่ไม่ได้รู้อะไรเกี่ยวกับประเด็นทางกฎหมาย (เช่นโปรแกรมเมอร์เป็นต้น) เมื่อมีคนที่ไม่ทราบเกี่ยวกับประเด็นทางกฎหมาย (aka ทนายความ) คุณสามารถถามแทน ฉันไม่ได้ทำอะไรกับทนายความเลย แต่ฉันจะไม่ขอคำแนะนำจากอัลกอริทึมสักตัวและฉันจะไม่ขอคำแนะนำด้านกฎหมายจากโปรแกรมเมอร์
Jörg W Mittag

IANAL: มันอาจเป็นรายละเอียดทางเทคนิค แต่ก็ยังสร้างความแตกต่างใหญ่เพราะมันเปลี่ยนสิ่งที่มีการเผยแพร่ในลักษณะที่มีความสำคัญทางกฎหมาย ด้วยการเชื่อมโยงแบบคงที่คุณกำลังสร้างงานรวมซึ่งตามกฎของ GPL ไม่สามารถแจกจ่ายนอก GPL ได้ ด้วยการเชื่อมโยงแบบไดนามิกคุณอาจทำสิ่งนี้เช่นกันเช่นถ้าคุณทำแพ็กเกจไลบรารีด้วยซอฟต์แวร์ของคุณในไฟล์ ZIP แต่ด้วยการเชื่อมโยงแบบไดนามิกคุณสามารถแจกจ่ายได้โดยไม่ต้องมีห้องสมุดและเป็นงานของคุณ 100% แม้ว่าจะไม่ได้ทำงานด้วยตัวเอง และแน่นอนคุณยังสามารถเสนอไลบรารี่ภายใต้ GPL
flarn2006

0

ไม่ทราบว่าความจริงมีอยู่ในนี้และ IANAL เป็นต้น; แต่ในการตีความของฉันสิ่งที่สำคัญคือห้องสมุดที่คุณเชื่อมโยงอยู่นั้นอยู่ในรูปแบบบางอย่างที่รวมอยู่ใน "binary" (โดยที่ "binary" ในกรณีของภาษาโปรแกรมแบบไดนามิกนั้นเป็นเพียงซอร์สโค้ดที่กระจายอยู่นี่คือ สิ่งที่ฉันทำจากคำจำกัดความของ "ฐานสอง" ของ FSF ในบริบทนี้)

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

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