Thực tế GPL với ngoại lệ classpath có ý nghĩa gì trong thực tế?


70

Oracle dường như cấp phép cho tất cả các mã nguồn mở liên quan đến Java của họ theo GPL với một ngoại lệ classpath . Theo những gì tôi hiểu, điều này dường như cho phép kết hợp các thư viện này với mã của riêng bạn thành các sản phẩm không phải được GPL bảo hiểm.

  1. Cái này hoạt động ra sao?
  2. Các ví dụ về làm thế nào tôi có thể và không thể sử dụng các lớp này là gì?
  3. Tại sao giấy phép mới này được sử dụng trái ngược với LGPL, dường như cho phép thực hiện khá nhiều điều tương tự, nhưng được thiết lập và hiểu rõ hơn?
  4. Sự khác biệt của LGPL là gì?

1
Tôi đã tìm thấy điều này trên wikipedia: en.wikipedia.org/wiki/ Nhật , điều này sẽ làm sáng tỏ mọi thứ một chút, nhưng tôi vẫn không hiểu tại sao ai đó sẽ sử dụng điều này trên LGPL. Câu hỏi hay!

1
Các trang Wikipedia không đề cập đến những thứ như "người dùng phải có thể trao đổi thư viện với phiên bản của chính mình", đó là các quy định của LGPL. Vì vậy, có lẽ GPL + Ngoại lệ không yêu cầu điều đó?
Thilo

1
Đọc tiếp, đó dường như là trường hợp: "LGPL đưa ra nhiều yêu cầu hơn cho ngoại lệ liên kết: bạn phải cho phép sửa đổi các phần của Thư viện bạn sử dụng và kỹ thuật đảo ngược (của chương trình và thư viện) để gỡ lỗi các sửa đổi đó"
Thilo

Trong trường hợp này, tôi không được phép làm gì theo giấy phép này? Tôi có thể sao chép mã được cấp phép (chọn + chọn lớp) vào cơ sở mã của riêng tôi (tất nhiên không được sửa đổi)? Tôi có thể sử dụng các công cụ xây dựng tự động để sửa đổi nhị phân kết quả không? Obfuscators, giảm thiểu, vũ nữ thoát y chết?
Thilo

Bạn có thể sao chép mã từ mã này và chỉ sử dụng mã đó trong mã của riêng bạn nếu mã của riêng bạn cũng được phát hành theo giấy phép "GPL với ngoại lệ classpath" . Nếu mã của bạn là độc quyền hoặc theo hầu hết các giấy phép nguồn mở khác như MIT, thì bạn không được phép sử dụng nó.
Abhi Beckert

Câu trả lời:


69

Trước hết, tôi không phải là một luật sư. Nhưng tôi đã nghiên cứu nhiều giấy phép và hiểu các vấn đề liên quan đến chúng.

Thứ hai, tôi biết đây là một câu hỏi cũ, nhưng tôi nghĩ nó vẫn là một điểm gây nhầm lẫn và quan tâm. Nếu đó không phải là một điểm đáng quan tâm, thì nó nên như vậy. Chọn một giấy phép là một vấn đề lớn mà bạn không thể thay đổi một cách tầm thường, đặc biệt là nếu có nhiều người đóng góp.

(L) GPL đã được viết với C / C ++ trong tâm trí, thật không may. Nó nói về "Mã nguồn", "Mã đối tượng", "Liên kết động", "Liên kết tĩnh", "Trình biên dịch" và "Trình thông dịch mã đối tượng". Vì vậy, việc dịch ngôn ngữ này cho các ngôn ngữ khác không tuân theo các kỹ thuật biên dịch tương tự (chẳng hạn như mã byte của Java, Python chỉ trong thời gian biên dịch hoặc bản chất diễn giải của Javascript) đòi hỏi một số giả định và giả định. Khi bạn đang nói về luật pháp - tức là suy nghĩ về các vụ kiện cuối cùng của tòa án trong đó hai bên đang tranh cãi - không có sự phân biệt rõ ràng là một điều TUYỆT VỜI.

Một đoạn mã được cấp phép GPL tiêu chuẩn khá đơn giản trong ý định. Bất cứ ai sử dụng mã đó đều được dự kiến ​​sẽ phát hành mã của họ cho tất cả người dùng khi họ phân phối hoặc bán nó. Đó là virus GPL mà Richard Stallman muốn tạo ra và làm rõ ràng và sạch sẽ.

LGPL ban đầu là một nỗ lực cho phép một "thư viện" không bị virus. Nhưng họ vẫn muốn người dùng cuối có thể tự thay thế thư viện, do đó, sự khác biệt giữa liên kết "tĩnh" và "động" - người dùng có thể trao đổi sang thư viện được liên kết động khác, do đó không cần phải được cấp phép như GPL. Và một liên kết tĩnh yêu cầu người dùng phải là GPL. Giấy phép thực sự nói về "các tệp tiêu đề", rõ ràng trong C / C ++ nhưng rõ ràng là không rõ ràng khi bạn ở trong thế giới Java, Python, Javascript, v.v. Vì vậy, L ("thư viện") của công cụ LGPL là bùn, tốt nhất.

Điều này đi đến mấu chốt của vấn đề. Bất cứ điều gì không rõ ràng là BAD trong thế giới của pháp luật. Nếu tôi đang xem xét việc xây dựng một cái gì đó bằng cách sử dụng thành phần GPL hoặc LGPL, tôi muốn chắc chắn vị trí pháp lý của mình trong tương lai nếu tôi ra tòa. Nhưng cho đến hôm nay, tôi không chắc chắn bởi vì thực sự chưa có vụ kiện nào tốt ở tòa án thành lập tiền lệ pháp lý, chỉ có những tranh luận về trí tuệ trên các diễn đàn như thế này.

Đây là nơi Ngoại lệ Classpath là vô giá. Nó nêu rõ rằng mã theo giấy phép là (L) GPL, nhưng bất cứ điều gì sử dụng mã đó đều có thể tuân theo bất kỳ giấy phép nào họ muốn. Không IFS, ands, hoặc buts. Nếu bạn thay đổi mã lõi (ví dụ: sửa lỗi), bạn vẫn phải phát hành những thay đổi đó như một phần của GPL. Nhưng sử dụng KHÔNG lây nhiễm cho bạn.

Từ góc độ kinh doanh, tôi hiểu tại sao một số người không muốn chạm vào mã GPL với cực 10 '. Vị thế pháp lý không rõ ràng và doanh nghiệp có thể bị kéo dài một thập kỷ khi tiền lệ pháp lý cuối cùng được thiết lập. Hoặc họ có thể bị mắc kẹt trong tòa án trong nhiều năm đấu tranh để thiết lập tiền lệ pháp lý. Bất kể họ chỉ không muốn mạo hiểm chi phí của trận chiến đó. Thêm điều khoản Classpath Exception sẽ loại bỏ các câu hỏi pháp lý và tránh mọi trường hợp tòa án tiềm năng (nghiêm trọng).

Vì vậy, với tôi, Classpath Exception khác nhiều so với LGPL. Đây là một cách rõ ràng về mặt pháp lý để vẽ một đường sáng cho phép không sử dụng GPL hoặc mã nguồn GPL hoặc LGPL.


21
IANAL, nhưng tôi là một trong những người tạo ra Classpath Exception, và đây là câu trả lời đúng. Ngoại lệ được tạo để hỗ trợ các trường hợp sử dụng nhúng được biên dịch AOT trong đó các nhà phát triển sẽ liên kết tĩnh các nhị phân (với gcj trong trường hợp của chúng tôi). Chúng tôi cần một cái gì đó giống như giấy phép libgcc, vì vậy tôi đã viết phiên bản đầu tiên của Classpath Exception dựa trên đó. Nó đã trưởng thành từ đó, nhưng tinh thần là như nhau.
Anthony Green

6

GPL với ngoại lệ classpath hoạt động như LGPL cho hầu hết các mục đích sử dụng.

Điều đó có nghĩa là bạn cần có khả năng gửi nguồn cho thư viện theo yêu cầu. Điều đó không có nghĩa là bạn cần có khả năng gửi nguồn của riêng mình. Điều đó xảy ra có nghĩa là bạn không phải gửi một cách để thay thế thư viện nếu bạn liên kết tĩnh với nó, nhưng bạn không thể sử dụng khóa chung để ngăn thay thế.


-3

Có vẻ như giấy phép kiểu "GPL với ngoại lệ classpath" có thể cũ hơn LGPL.

Có lẽ lý do duy nhất bất cứ ai vẫn sử dụng nó là bởi vì mã GPL không thể được chuyển sang mã LGPL mà không có sự cho phép bằng văn bản từ mọi người đã từng đóng góp mã.


7
Phiên bản đầu tiên của LGPL được phát hành vào năm 1991, do đó có trước Java. vi.wikipedia.org/wiki/LGPL
Thilo

Nó có trước java, nhưng nó có trước tất cả các mã bên trong Java không? Có lẽ bản phát hành Java đầu tiên chứa mã từ một số dự án "GPL với classpath" cũ hơn.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.