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


22

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

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

ฉันเดาว่าคำตอบจะต้องแตกต่างกันไปตามใบอนุญาตโอเพนซอร์ส แต่ฉันต้องการคำตอบทั่วไปให้มากที่สุด

PS: ฉันส่วนใหญ่กังวลเกี่ยวกับด้านกฎหมาย แต่อย่าลังเลที่จะรวมมุมมองด้านจริยธรรมของคุณ


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

1
@Tim Post: ส่วนใหญ่เป็นคำถามเชิงทฤษฎี แต่หากสามารถช่วยสมมติว่าทั้งสองโครงการมีใบอนุญาต GPL เนื่องจากเป็นเรื่องธรรมดา
Olivier Lalonde

คำตอบ:


25

ฉันพยายามทำให้คำตอบนี้เป็น 'meta' ที่สามารถใช้งานได้มากที่สุด

การใช้ตัวอย่าง / บิตจากโครงการอื่น

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

โปรแกรมของคุณควรมีไฟล์ AUTHORS (หรือคล้ายกัน) ซึ่งคุณจะแสดงรายการผู้มีส่วนร่วมและสิ่งที่คุณใช้จากโครงการอื่น ๆ

แยกโครงการ

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

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

นอกเหนือจากนั้นให้สงวนลิขสิทธิ์เสมอ หากเพิ่มลิขสิทธิ์ของคุณเองในสิ่งที่มีอยู่ให้แน่ใจว่าคุณทำเครื่องหมายสิ่งที่คุณอ้างสิทธิ์อย่างชัดเจน


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

@ David - OP ต้องการคำตอบทั่วไป (ด้วยเหตุนี้ฉันจึงขอวิจัยใบอนุญาต) คุณค่อนข้างถูกต้อง อย่างไรก็ตามมันเป็น 'ดี' ที่อนุญาตให้ใช้สิทธิ์การเปลี่ยนแปลงสองอย่างที่คุณทำกับรหัส BSD ดังนั้นผู้เขียนดั้งเดิมสามารถใช้งานได้จริงหากพวกเขาต้องการ
Tim Post

1
ไฟล์สิทธิ์การใช้งานหลักควรมีประกาศลิขสิทธิ์ของคุณที่ด้านบนของผู้แต่งดั้งเดิมหรือไม่ เมื่อ SLOC ของคุณเกิน 200% ของ SLOCs โครงการดั้งเดิม 300%? หากโปรเจคที่คุณแยกออกมากลายเป็นหนึ่งใน librares หรือโมดูลภายในโครงการของคุณ?
เตาแก๊ส

@hobs imo คำสั่งเกี่ยวกับลิขสิทธิ์ไม่ได้บ่งบอกถึงความสำคัญของการมีส่วนร่วม แต่เป็นรายละเอียดตามลำดับต้นกำเนิด

@TechnikEmpire ลำดับตามลำดับดูสมเหตุสมผล แต่สำหรับรายชื่อผู้มีส่วนร่วมแทนที่จะเป็นประกาศลิขสิทธิ์ ฉันคิดว่าการแจ้งเตือนด้านลิขสิทธิ์อาจจัดได้ดีกว่าตามส่วนของรหัสที่ใช้กับและมูลค่า / ปริมาณของส่วนเหล่านั้นในแพ็คเกจ การมีรายชื่อบุคคลที่คุณต้องการติดต่อตามลำดับความสำคัญมีประโยชน์หากคุณต้องการเปลี่ยนบางสิ่งเกี่ยวกับสิทธิ์ใช้งาน ดังนั้นหากคุณได้รับอนุญาตจากคนแรก ๆ แต่ไม่ใช่คนสุดท้ายคุณมีรหัสจำนวนน้อยกว่าที่จะสร้างใหม่หากคุณตั้งใจจะทำการเปลี่ยนแปลง ฉันสงสัยว่าไลนัสทำอะไร
เตาแก๊ส
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.