คุณสามารถใช้ใบอนุญาตโอเพนซอร์สที่ จำกัด น้อยกว่าจากใบอนุญาตที่คุณมีได้หรือไม่?
สมมติว่าคุณมีโปรเจ็กต์ Java โอเพ่นซอร์สที่มี Gradle เป็นระบบบิลด์และคุณต้องการเพิ่มสิทธิ์การใช้งาน MIT ลงไป พิจารณากรณี:
กรณีที่ 1. จากไฟล์ build.gradle คุณประกาศความต้องการใช้งานบนJUnit5ซึ่งได้รับอนุญาตภายใต้ Eclipse Public License - v 2.0 คุณทำการทดสอบสองสามครั้งในโฟลเดอร์ทดสอบและทั้งหมดนั้นพร้อมกับโฟลเดอร์ src จะถูกอัปโหลดบน GitHub โครงการของคุณสามารถได้รับอนุญาตภายใต้ MIT หรือไม่? นอกจากนี้คุณจะสร้างแพ็คเกจพร้อมโปรเจ็กต์ของคุณ แต่การทดสอบ JUnit5 จะไม่รวมอยู่ในนั้น
กรณีที่ 2. จากไฟล์ build.gradle คุณจะประกาศการใช้คำอธิบายประกอบ javaจาก JetBrains ซึ่งได้รับอนุญาตภายใต้ Apache License 2.0 โครงการของคุณสามารถได้รับอนุญาตภายใต้ MIT หรือไม่? นอกจากนี้คุณจะสร้างแพ็คเกจกับโปรเจ็กต์ของคุณและคุณต้องการให้ผู้อ้างอิงดูคำอธิบายประกอบในโค้ดของคุณ แต่คุณไม่กังวลว่าพวกเขาจะสามารถใช้คำอธิบายประกอบในโค้ดของพวกเขาได้หรือไม่
TL; DR: ฉันเข้าใจว่าหากคุณคัดลอกและวางไฟล์ของโปรเจ็กต์คุณสามารถอนุญาตให้ใช้สิทธิ์ซ้ำได้ด้วยใบอนุญาตที่เข้ากันได้เท่านั้น แต่จะถือเป็นจริงได้เช่นเดียวกันหากคุณพึ่งพาพวกเขาผ่านแพ็คเกจ Maven / Gradle และแพ็คเกจโปรเจ็กต์ที่คุณสร้าง จะไม่มีพวกเขา?
คำตอบ
เมื่อคุณประกาศการพึ่งพาแพ็คเกจ X มีความเป็นไปได้สองประการ
Package X มีใบอนุญาต copyleft ที่แข็งแกร่งเช่น GPL หรือ AGPL: ใบอนุญาตเหล่านี้มีข้อกำหนดว่าแอปพลิเคชันไบนารีขั้นสุดท้ายจะได้รับอนุญาตภายใต้ใบอนุญาต GPL หรือ AGPL ตามลำดับ ด้วยเหตุนี้พวกเขาจึง จำกัด สิทธิ์การใช้งานที่คุณสามารถเลือกสำหรับรหัสของคุณเองได้
บิลด์ใด ๆ ที่คุณแจกจ่ายซึ่งมีแพ็กเกจ X จะต้องได้รับสิทธิ์การใช้งานภายใต้ไลเซนส์เดียวกับแพ็กเกจ X หากไม่มีบิลด์ที่ไม่มีแพ็กเกจ X แนะนำให้อนุญาตซอร์สโค้ดด้วยไลเซนส์เดียวกัน หากคุณมีบิลด์ที่ไม่มีแพ็คเกจ X คุณสามารถเลือกใบอนุญาตที่เข้ากันได้สำหรับซอร์สโค้ดของคุณ
Package X มีใบอนุญาตอื่น ๆ : สิทธิ์การใช้งานเหล่านี้ไม่ขยายขอบเขตเกินกว่าไฟล์ที่ได้รับอนุญาตอย่างชัดเจนด้วยใบอนุญาตดังกล่าวดังนั้นจึงไม่ จำกัด สิทธิ์การใช้งานที่คุณสามารถเลือกสำหรับรหัสของคุณเองได้
ในกรณีนี้คุณสามารถใช้ใบอนุญาตโอเพนซอร์สที่มีข้อ จำกัด น้อยกว่าใบอนุญาตโอเพ่นซอร์สที่เข้มงวดมากขึ้นหรือแม้แต่ใบอนุญาตแบบปิดที่เข้ากันได้
ทั้งสองกรณีที่คุณกล่าวถึง (JUnit5 และ java-annotations) เกี่ยวข้องกับสิทธิ์การใช้งานในประเภทที่สองดังนั้นจึงไม่มีผลต่อตัวเลือกใบอนุญาตที่คุณมีสำหรับรหัสของคุณเอง