การใช้สิทธิ์การใช้งานที่แตกต่างกันสำหรับสาขาต่างๆของที่เก็บเดียวกัน
ฉันมีที่เก็บ Git พร้อมโปรเจ็กต์ขนาดกลางบน GitHub เนื่องจากมีส่วนประกอบบางอย่างขึ้นอยู่กับไลบรารี GPL ปัจจุบันที่เก็บจึงได้รับอนุญาตภายใต้ GPL ด้วย อย่างไรก็ตามไลบรารีที่ได้รับอนุญาต GPL จะถูกใช้โดยคอมโพเนนต์บางส่วนเท่านั้น (ซึ่งสามารถแยกได้) และส่วนที่เหลือของโปรเจ็กต์สามารถใช้งานได้อย่างสมบูรณ์แบบโดยไม่มีส่วนประกอบเหล่านั้น ดังนั้นฉันต้องการอนุญาตทุกสิ่งที่ไม่มีการอ้างอิงไลบรารี GPL ใด ๆ ภายใต้ใบอนุญาต MIT แนวทางปฏิบัติที่ดีที่สุดในการบรรลุเป้าหมายนี้คืออะไร?
ความคิดของฉันคือการมีสองสาขาที่แตกต่างกัน: สาขาหนึ่งมีรหัสเต็มและได้รับอนุญาตภายใต้ GPL สาขาอื่นจะลบฟังก์ชันทั้งหมดที่ขึ้นอยู่กับรหัส GPL และได้รับอนุญาตภายใต้ MIT เป็นไปได้หรือไม่และ / หรือเป็นเรื่องปกติที่จะมีใบอนุญาตที่แตกต่างกันสำหรับสาขาต่างๆของที่เก็บเดียวกัน ถ้าไม่จะมีทางเลือกอื่นที่ดีกว่า?
อาจเป็นปัญหาที่ในทางเทคนิคแล้วประวัติทั้งหมดของสาขาใหม่ที่ไม่ใช่ GPL เมื่อรวมรหัส GPL แล้ว? หรือจะเป็นเรื่องปกติตราบใดที่รหัส GPL ทั้งหมดถูกลบออกจากสาขานั้นก่อนที่ฉันจะเพิ่มไฟล์ใบอนุญาต MIT ใหม่ในสาขา
โปรดทราบว่าคำถามนี้ค่อนข้างคล้ายกัน แต่ฉันรู้สึกว่าของฉันเกี่ยวข้องกับการใช้งานทางเทคนิคมากกว่า นั่นคือฉันสามารถใส่ไฟล์ LICENSE สองไฟล์ในไดเร็กทอรีรูทของที่เก็บได้หรือไม่โดยขึ้นอยู่กับสาขาที่เรากำลังใช้งานอยู่
คำตอบ
สาขา Git ทำงานได้ไม่ดีนักในการรักษา "รุ่น" ที่แตกต่างกันของโครงการเดียวกันเนื่องจากไม่มีวิธีที่ดีในการแบ่งปันการเปลี่ยนแปลงข้ามสาขาโดยไม่รวมเข้าด้วยกันทั้งหมด ด้วยเหตุผลทางเทคนิคฉันขอแนะนำให้คุณไม่ใช้สาขาที่มีใบอนุญาตแตกต่างกัน ผู้ใช้ยังไม่สามารถค้นพบสาขาดังกล่าวได้มากนัก
ให้เก็บรหัสทั้งหมดไว้ในสาขาหลัก แต่เก็บรหัสที่ได้รับอนุญาตต่างกันในโฟลเดอร์ต่างๆและทำให้ชัดเจนว่ารหัสใดอยู่ภายใต้ใบอนุญาตใด
GPL ไม่ต้องการให้รหัสดาวน์สตรีมอยู่ภายใต้ GPL กำหนดให้ผลงานลอกเลียนแบบ (โดยรวม) อยู่ภายใต้ใบอนุญาต GPL เดียวกัน แต่สิ่งนี้จะพึงพอใจเมื่อส่วนประกอบใด ๆ ที่คุณเขียนขึ้นเองอยู่ภายใต้ใบอนุญาตที่เข้ากันได้กับ GPL เช่น MIT เพื่อหลีกเลี่ยงข้อสงสัยคุณอาจอนุญาตให้ใช้ส่วนประกอบเหล่านั้นเป็น "MIT หรือ GPL" สิ่งนี้สำคัญสำหรับใบอนุญาตที่ไม่สามารถใช้ร่วมกันได้เช่น "Apache-2.0 หรือ GPL-2.0-only"
ดังนั้นแนวทางปฏิบัติที่ดีที่สุดคือแยกส่วนที่ครอบคลุม GPL ออกจากส่วนที่คุณเขียนด้วยตัวเองทั้งหมดและใช้ LICENSE ระดับบนสุดเพื่ออธิบายว่าส่วนใดบ้างที่มีอยู่ภายใต้ใบอนุญาต หากคุณต้องการทำสิ่งนี้อย่างแม่นยำมากคุณสามารถใช้copyrightรูปแบบไฟล์ที่เครื่องอ่านได้ของ Debian ซึ่งเชื่อมโยงรูปแบบลูกโลกกับใบอนุญาต คุณสามารถเก็บข้อความใบอนุญาตเต็มรูปแบบทั้งภายในไฟล์ใบอนุญาตแบบเดียวกันหรืออาจจะเป็นไฟล์แยกต่างหากชอบLICENSE.GPL.txt
, LICENSE.MIT.txt
หรือในไดเรกทอรีของตน
เนื่องจากคุณกำลังนำเสนอรหัสทั้งหมดภายใต้ GPL ย้ายเอ็มไอทีสำหรับบางส่วนจะต้องrelicensing นี่เป็นเรื่องเล็กน้อยหากคุณเป็นผู้สนับสนุนเพียงรายเดียวเนื่องจากคุณในฐานะผู้ถือลิขสิทธิ์ แต่เพียงผู้เดียวสามารถออกใบอนุญาตได้ตามที่คุณต้องการ แต่หากมีผู้ร่วมให้ข้อมูลรายอื่นคุณจะต้องได้รับความยินยอมจากพวกเขาในการมอบที่ระลึกหรือต้องลบการมีส่วนร่วมของพวกเขา (ซึ่งอาจเป็นเรื่องยุ่งยากมากเพราะโดยทั่วไปจะต้องเขียนองค์ประกอบใหม่โดยเริ่มจากสถานะสุดท้ายก่อนการสนับสนุนที่ครอบคลุม GPL) ฉันไม่คิดว่ามันสำคัญที่ประวัติ Git จะแสดงไฟล์เดียวกันกับที่ GPL ครอบคลุมแม้หลังจากการถ่ายทอด ใบอนุญาตเก่ายังคงใช้ได้สำหรับเวอร์ชันเก่าเหล่านั้นใบอนุญาตใหม่ยังคงใช้ได้สำหรับเวอร์ชันใหม่เหล่านั้น