Gọi phần mềm GPL từ phần mềm không GPL


30

Tôi có thể (về mặt pháp lý) sử dụng một chương trình được phát hành theo GPL từ một chương trình khác mà tôi đang viết và không phải tôn trọng GPL (đối với chương trình tôi đang viết) không?

Ví dụ: tôi có GUI sử dụng chương trình (nằm dưới GPL), tôi có thể ẩn mã trong GUI và thậm chí bán nó không?

Câu trả lời:


30

Bạn có thể sử dụng chương trình GPLed từ chương trình của riêng bạn mà chương trình của bạn không bị ảnh hưởng bởi GPL, nhưng bạn không thể liên kết mã GPLed với chương trình của riêng mình mà chương trình của bạn không tuân theo các điều khoản của GPL.

Trong ví dụ được cung cấp trong câu hỏi, trong đó bạn đã viết một trình bao bọc GUI xung quanh chương trình dòng lệnh hiện có, GUI của bạn không bị ràng buộc bởi các điều khoản của GPL, với điều kiện đó là một chương trình riêng biệt chạy chương trình GPLed trong một quy trình riêng biệt và chỉ giao tiếp với nó thông qua (các) giao diện hiện có - ví dụ: qua dòng lệnh và / hoặc qua stdin / stdout.

Một số bit có liên quan từ Câu hỏi thường gặp về GPL :

Đâu là ranh giới giữa hai chương trình riêng biệt và một chương trình có hai phần? Đây là một câu hỏi pháp lý, mà cuối cùng các thẩm phán sẽ quyết định. Chúng tôi tin rằng một tiêu chí phù hợp phụ thuộc cả vào cơ chế giao tiếp (exec, pipe, rpc, chức năng gọi trong một không gian địa chỉ dùng chung, v.v.) và ngữ nghĩa của giao tiếp (loại thông tin nào được hoán đổi cho nhau).

Nếu các mô-đun được bao gồm trong cùng một tệp thực thi, chúng chắc chắn được kết hợp trong một chương trình. Nếu các mô-đun được thiết kế để chạy liên kết với nhau trong một không gian địa chỉ dùng chung, điều đó gần như chắc chắn có nghĩa là kết hợp chúng thành một chương trình.

Ngược lại, đường ống, ổ cắm và đối số dòng lệnh là các cơ chế giao tiếp thường được sử dụng giữa hai chương trình riêng biệt. Vì vậy, khi chúng được sử dụng để liên lạc, các mô-đun thường là các chương trình riêng biệt. Nhưng nếu ngữ nghĩa của giao tiếp đủ thân mật, trao đổi các cấu trúc dữ liệu nội bộ phức tạp, thì đó cũng có thể là cơ sở để xem xét hai phần được kết hợp thành một chương trình lớn hơn.


Tôi có thể phát hành chương trình không miễn phí được thiết kế để tải trình cắm được phủ GPL không?

Nó phụ thuộc vào cách chương trình gọi các trình cắm thêm của nó. Chẳng hạn, nếu chương trình chỉ sử dụng rẽ nhánh đơn giản và thực thi để gọi và giao tiếp với các trình cắm, thì các trình cắm là các chương trình riêng biệt, do đó, giấy phép của trình cắm không đưa ra yêu cầu nào về chương trình chính.

Nếu chương trình tự động liên kết các trình cắm và chúng thực hiện các cuộc gọi chức năng với nhau và chia sẻ cấu trúc dữ liệu, chúng tôi tin rằng chúng tạo thành một chương trình duy nhất, phải được coi là phần mở rộng của cả chương trình chính và trình cắm. Để sử dụng các trình cắm được phủ GPL, chương trình chính phải được phát hành theo giấy phép phần mềm miễn phí tương thích GPL hoặc GPL và phải tuân theo các điều khoản của GPL khi chương trình chính được phân phối để sử dụng với các chương trình này bổ sung.

Nếu chương trình tự động liên kết các trình cắm, nhưng giao tiếp giữa chúng bị giới hạn trong việc gọi chức năng 'chính' của trình cắm với một số tùy chọn và chờ đợi nó trở lại, đó là trường hợp đường biên.

Lưu ý rằng GPL áp dụng đầy đủ cho chương trình dòng lệnh cơ bản trong mọi trường hợp - nếu bạn phân phối nó (trái ngược với việc người dùng có được nó từ một nguồn khác), bạn có trách nhiệm cung cấp bản sao GPL cho người dùng, tạo ra nó rõ ràng với họ rằng chương trình dòng lệnh nằm dưới GPL (ngay cả khi trình bao bọc GUI không) và cung cấp mã nguồn của chương trình dòng lệnh cho họ theo yêu cầu. Từ Câu hỏi thường gặp về GPL một lần nữa:

Nếu mọi người phân phối phần mềm được bảo hiểm GPL gọi nó là một phần của hệ thống mà người dùng biết là độc quyền, người dùng có thể không chắc chắn về quyền của mình đối với phần mềm được bảo hiểm GPL. Nhưng nếu họ biết rằng những gì họ đã nhận được là một chương trình miễn phí cộng với một chương trình khác, bên cạnh nhau, quyền của họ sẽ rõ ràng.

Tuyên bố từ chối trách nhiệm tiêu chuẩn: Tôi không phải là luật sư và ngay cả khi tôi là luật sư, tôi không phải là luật sư của bạn . Nếu bạn cần một câu trả lời dứt khoát, hãy tham khảo ý kiến ​​một chuyên gia pháp lý thích hợp, người được cấp phép hành nghề trong phạm vi quyền hạn của bạn.


1
Cần lưu ý rằng vị trí của FSF về liên kết là vị trí thiểu số. (Và, IMO, nó chẳng có ý nghĩa gì cả. Một quy trình tự động không thể tạo ra một tác phẩm mới.)
David Schwartz

1
Tuy nhiên, FSF đã viết GPL. Điều này làm cho ý kiến ​​của họ có liên quan hơn nhiều. "Khi chúng tôi nói X, chúng tôi có nghĩa là {...}" thường được chấp nhận tại tòa án. "Khi bạn nói X, bạn có nghĩa là {...}", không phải vậy.
MSalters

Điều đó có nghĩa là gì khi "chỉ sử dụng ngã ba đơn giản và thực thi để gọi" - ai đó có thể làm rõ điều này?
Krunal

Vì vậy, GPL có thể dễ dàng được bỏ qua bằng cách viết một trình bao bọc đường ống để chạy mã GPLed trong một quy trình riêng biệt? Điều đó dường như làm cho GPL không liên quan và không thể thực thi. Điều gì sẽ xảy ra nếu tôi viết thư viện của riêng mình và liên kết với nó cùng với thư viện GPLed. Có phải thư viện độc lập riêng biệt của tôi cũng trở thành GPLed không? Điều gì xảy ra nếu tôi liên kết với thư viện của người khác trong khi sử dụng mã GPLed? Có thư viện của họ trở thành GPLed? Nếu bạn trả lời không cho bất kỳ câu hỏi nào trong số này, nó sẽ mở ra một lỗ hổng lớn để dễ dàng vượt qua GPL. Nếu bạn trả lời có, thì bạn đang vi phạm luật bản quyền.
Cerin

@Cerin - GPL chỉ thực sự áp dụng cho mã mà bạn phân phối. Vì vậy, trong khi bạn có thể viết chương trình liên kết đến cả giấy phép tương thích GPLed và không tương thích GPL, thì bạn không thể phân phối chương trình đó cho bên thứ ba, vì nó sẽ chạy mã GPLed và không tương thích GPL trong cùng một quy trình. ("Sử dụng mà không phân phối lại" được nhiều người coi là lỗ hổng trong GPL, vì nó có nghĩa là các dịch vụ web và những thứ tương tự có thể vượt qua GPL hoàn toàn vì chúng tự chạy phần mềm thay vì cho người dùng chạy. GNU AGPL là một cố gắng giải quyết vấn đề này.)
Dave Sherohman

0

Phụ thuộc những gì bạn có nghĩa là bằng cách sử dụng nó?

  • biên dịch nó thành mã của bạn
  • sử dụng thư viện dùng chung
  • chạy một thực thi

Nó cũng phụ thuộc chính xác phiên bản / biến thể của GPL mà mã khác nằm dưới.

  • GPL
  • LGPL
  • LẠI
  • Có lẽ là những người khác

Từ chối trách nhiệm pháp lý: Tôi không phải là một luật sư.


-2

Điều đó phụ thuộc vào cách chính xác chương trình của bạn "sử dụng" chương trình GPL. Câu hỏi thường gặp về GPL có một lời giải thích khá dài , nhưng nó vẫn còn nhiều điều để giải thích:

Bạn không thể kết hợp phần mềm được bảo hiểm GPL trong một hệ thống độc quyền. (...) Tuy nhiên, trong nhiều trường hợp, bạn có thể phân phối phần mềm được bảo hiểm GPL cùng với hệ thống độc quyền của bạn. Để làm điều này một cách hợp lệ, bạn phải đảm bảo rằng các chương trình miễn phí và không miễn phí giao tiếp với nhau, chúng không được kết hợp theo cách làm cho chúng có hiệu quả thành một chương trình duy nhất. (...) Nếu hai chương trình được kết hợp để chúng trở thành hai phần của một chương trình một cách hiệu quả, thì bạn không thể coi chúng là hai chương trình riêng biệt. Vì vậy, GPL phải bao gồm toàn bộ.Nếu hai chương trình vẫn tách biệt tốt, như trình biên dịch và kernel, hoặc như trình soạn thảo và trình bao, thì bạn có thể coi chúng là hai chương trình riêng biệt nhưng bạn phải thực hiện đúng. Vấn đề chỉ đơn giản là một trong các hình thức: cách bạn mô tả những gì bạn đang làm. Tại sao chúng ta quan tâm đến điều này? Bởi vì chúng tôi muốn đảm bảo người dùng hiểu rõ trạng thái miễn phí của phần mềm được bảo hiểm GPL trong bộ sưu tập.

Tôi nghĩ trong ví dụ của bạn về GUI tồn tại chủ yếu để gọi chương trình GPL dòng lệnh, hai chương trình rõ ràng tạo thành một chương trình duy nhất, vì vậy bạn phải giải phóng mã của mình theo GPL.


Không, họ không "rõ ràng tạo thành một chương trình". Miễn là chương trình dòng lệnh cơ bản vẫn có thể hoạt động trong trường hợp không có lớp phủ GUI, chúng được kết hợp bởi "tập hợp đơn thuần" và không "thực sự là một chương trình". Lưu ý các ví dụ trong văn bản bạn đã trích dẫn - một trình biên dịch nằm trên hạt nhân và sẽ không chạy mà không có nó, nhưng kernel sẽ vui vẻ chạy trong trường hợp không có trình biên dịch.
Dave Sherohman

1
@Dave: Liệu chương trình dòng lệnh cơ bản vẫn có thể hoạt động trong trường hợp không có lớp phủ GUI có liên quan hay không nếu trạng thái giấy phép của chương trình dòng lệnh bị nghi ngờ - nhưng câu hỏi là về GUI, hoàn toàn vô dụng mà không có chương trình dòng lệnh, và do đó, nó thực sự vượt ra khỏi sự nghi ngờ rằng chúng tạo thành một chương trình duy nhất.
Michael Borgwardt

Hãy thay thế một trong những ví dụ từ phần bạn trích dẫn và xem cách giữ nó. "... nhưng câu hỏi là về trình biên dịch, nó hoàn toàn vô dụng nếu không có kernel, và do đó, nó thực sự vượt ra khỏi sự nghi ngờ rằng chúng tạo thành một chương trình duy nhất." Tất nhiên, ngoại trừ, văn bản bạn trích dẫn nêu rõ "bạn có thể coi chúng là hai chương trình riêng biệt". Nếu nó chỉ đơn giản là vấn đề phụ thuộc, thì bạn không bao giờ có thể chạy phần mềm đóng trên Linux vì phần mềm đó sẽ "hoàn toàn vô dụng" nếu không có kernel (GPLed).
Dave Sherohman

@Dave: Tất nhiên, ngoại trừ, trình biên dịch và tất cả các loại phần mềm đóng KHÔNG phải là vô dụng nếu không có nhân Linux, vì chúng có thể và chạy trên mọi thứ thực hiện các tiêu chuẩn thư viện POSIX và / hoặc C, và cung cấp chức năng quan trọng của riêng chúng . Vấn đề hoàn toàn khác với trình bao bọc GUI chỉ tồn tại để điều khiển một chương trình dòng lệnh cụ thể.
Michael Borgwardt

3
Tuy nhiên, bạn đã sai về phần GUI. Trình bao bọc GUI tương tự đó sẽ hoạt động với các chương trình CLI khác, đặc biệt là các phiên bản mới hơn của bản gốc. Điều đó có liên quan trong bối cảnh này, bởi vì điều đó có nghĩa là các quyền GPL ban đầu trên chương trình cơ bản vẫn có thể được thực thi. Nếu tôi biên dịch lại nhanh hơn 10%, CLI sẽ không cản trở tôi.
MSalters

-3

Không.

Mã GPL chỉ có thể được sử dụng bởi mã GPL khác.

Trích dẫn dòng đầu tiên của bài viết GPL của wikipedia :

GPL là giấy phép copyleft đầu tiên cho sử dụng chung, có nghĩa là các tác phẩm phái sinh chỉ có thể được phân phối theo cùng điều khoản giấy phép.

Bên cạnh đó, GPL dài vài trang và tồn tại trong một số phiên bản.


Cảnh báo, rant cá nhân phía trước!

Cá nhân tôi không thích giấy phép GPL rất nhiều vì bản chất rất hạn chế và giống như virus. Họ gọi nó là "miễn phí" nhưng thực tế hoàn toàn ngược lại, mã GPL không thể được sử dụng bởi bất cứ thứ gì ngoại trừ mã GPL khác. Do đó, buộc các dự án khác vào GPL hoặc bị buộc phải viết lại toàn bộ thư viện, cho dù dự án hiện tại của bạn có phải là nguồn mở hay không. Có những dự án nguồn mở khổng lồ, chẳng hạn như freeBSD đã buộc phải viết lại hàng trăm ngàn dòng mã linux vì giấy phép của chúng không tương thích, nó quá "miễn phí" theo nghĩa "làm bất cứ điều gì bạn muốn", rõ ràng là không tương thích với GPL.

Nếu bạn muốn có một giấy phép thực sự "miễn phí" theo nghĩa "làm bất cứ điều gì bạn muốn", tôi khuyên bạn nên sử dụng giấy phép BSD hoặc MIT ... thực sự, hầu hết các giấy phép khác đều ổn. Đó chỉ là GPL thực sự có vấn đề vì mức độ hạn chế và cách buộc người khác tham gia. Cuối cùng, nó quá phức tạp.

À, ừ, đó cũng là vé một chiều. GPL có thể sử dụng mã / thư viện được cấp phép từ hầu hết các giấy phép, nhưng các thư viện / mã này không thể sử dụng mã GPL lần lượt.


Nó nói "tác phẩm phái sinh". Có bao gồm phần mềm tự động liên kết đến mã GPL không?
đúng

@WTP: chắc chắn là có - toàn bộ quan điểm của LGPL là có một giấy phép khác cho phép điều này.
Michael Borgwardt

3
Một vỏ GUI bao quanh chương trình dòng lệnh không phải là "tác phẩm phái sinh" như được định nghĩa cho mục đích bản quyền.
Dave Sherohman

1
@Dave Sherohman - điều đó dường như không rõ ràng. Câu trả lời được chấp nhận cho câu hỏi này cho biết: "IMHO, về mặt tinh thần, một trình bao bọc thuần túy chỉ đơn thuần phơi bày chức năng của chương trình GPL nên là GPL." Đó không chỉ là khía cạnh kỹ thuật trong cách họ giao tiếp, đó là ý định. Chẳng hạn, dịch một cuốn sách đang tạo ra một tác phẩm xuất phát. Chuyển đổi nó sang định dạng Kindle sẽ là một công việc bắt nguồn. Tôi có thể thấy một thẩm phán phán quyết rằng việc thêm GUI sẽ tạo ra một tác phẩm phái sinh. Coi chừng.
Scott Whitlock
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.