Làm thế nào để quy tắc GPL tĩnh so với liên kết động áp dụng cho các ngôn ngữ được diễn giải?


19

Theo hiểu biết của tôi, GPL cấm liên kết tĩnh từ mã không GPL sang mã GPL, nhưng cho phép liên kết động từ mã không GPL sang mã GPL. Vì vậy, đó là gì khi mã trong câu hỏi hoàn toàn không được liên kết vì mã được viết bằng ngôn ngữ diễn giải (ví dụ Perl)?

Có vẻ như quá dễ dàng để khai thác quy tắc nếu nó được coi là liên kết động, nhưng mặt khác, dường như cũng không thể tham chiếu hợp pháp mã GPL từ mã không GPL nếu nó được coi là tĩnh! Các ngôn ngữ được biên dịch ít nhất có sự phân biệt giữa liên kết tĩnh và liên kết động, nhưng khi tất cả "liên kết" chỉ đang chạy các tập lệnh, không thể biết ý định đó là gì nếu không có giấy phép rõ ràng!

Hoặc là sự hiểu biết của tôi về vấn đề này không chính xác, đưa ra câu hỏi? Tôi cũng đã nghe nói về một "ngoại lệ classpath" liên quan đến liên kết động; đó không phải là một phần của GPL mà thay vào đó là thứ gì đó có thể được thêm vào nó, vì vậy liên kết động chỉ được phép khi giấy phép bao gồm ngoại lệ này?


Bạn đã đọc gnu.org/licenses/lgpl-java.html chưa?

2
@delnan lgpl! = gpl
Johann

Câu trả lời:


16

Đối với câu hỏi cụ thể liên quan đến các ngôn ngữ được giải thích, Câu hỏi thường gặp về GPL rất rõ ràng :

Chương trình thông dịch, đến trình thông dịch, chỉ là dữ liệu; giấy phép phần mềm miễn phí như GPL, dựa trên luật bản quyền, không thể giới hạn dữ liệu bạn sử dụng trình thông dịch. Bạn có thể chạy nó trên bất kỳ dữ liệu nào (chương trình diễn giải), theo bất kỳ cách nào bạn thích và không có yêu cầu nào về việc cấp phép dữ liệu đó cho bất kỳ ai.

Đối với câu hỏi chung về liên kết động và tĩnh. Trước hết, quan điểm của FSF và Stallman là không quan trọng nếu liên kết là tĩnh hay động, GPL lây nhiễm theo bất kỳ cách nào. Từ Câu hỏi thường gặp về GPL của FSF:

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. Điều này có nghĩa là sự kết hợp của trình cắm được phủ GPL với chương trình chính không miễn phí sẽ vi phạm GPL.

Liên kết [tên chương trình của bạn] một cách tĩnh hoặc động với các mô-đun khác đang tạo ra một công việc kết hợp dựa trên [tên chương trình của bạn]. Do đó, các điều khoản và điều kiện của Giấy phép Công cộng GNU bao gồm toàn bộ sự kết hợp

Tuy nhiên, đây là nghi vấn từ quan điểm pháp lý. Trong trường hợp duy nhất thực sự ra tòa liên quan đến liên kết động - Galoob v. Nintendo - Tòa án phúc thẩm phán quyết rằng tác phẩm phái sinh "phải kết hợp một phần của tác phẩm có bản quyền dưới một hình thức nào đó" . Đó không phải là trường hợp với liên kết động.

Dù sao, bất kể liên kết động có thực sự lây nhiễm hay không, có công việc xung quanh. Ví dụ, nó được Nvidia sử dụng để cung cấp trình điều khiển nhị phân cho Linux. Bạn tạo trình bao bọc GPL (L), nhưng với tư cách là tác giả, bạn được phép thêm ngoại lệ đặc biệt để liên kết với nguồn đóng cụ thể. Vide FSF GPL FAQ .


Một trong những bản chất của tác phẩm phái sinh là không thể tách rời hoàn toàn tác phẩm của người giữ bản quyền gốc. Nếu Bob's Foo()được liên kết tĩnh để gọi Joe Bar(), thì người giữ bản quyền nên CALLđược gán cho người giữ bản quyền nào? Sự tương tác như vậy sẽ đủ để tạo thành một "tác phẩm phái sinh". Tuy nhiên, nếu công việc của Joe hoàn toàn nằm trong một tệp và Bob vẫn hoàn toàn nằm trong một tệp khác, thì sự xuất hiện của các tệp đó trong các thư mục khác nhau trên cùng một đĩa tạo thành tập hợp, không phải là dẫn xuất.
supercat

2
@thepaul: đã có một ưu tiên pháp lý quy định rằng ít nhất một phần của tác phẩm có bản quyền phải được đưa vào một tác phẩm để cấu thành tác phẩm phái sinh. Niềm tin của Stallman thường có rất ít nền tảng trong luật thực tế.
vartec

1
@thepaul: một mặt bạn có hành vi pháp lý được sử dụng bởi công ty 9 tỷ đô la, trên các yêu cầu khác của anh chàng thích đội mũ thiếc. Bạn cho rằng sau này đáng tin cậy hơn và bạn hoàn toàn có quyền tin như vậy.
vartec

1
Bạn trích dẫn phần sai của GPL FAQ rất rõ ràng . Phần bạn trích dẫn là về Nếu một trình thông dịch ngôn ngữ lập trình được phát hành theo GPL, điều đó có nghĩa là các chương trình được viết để được giải thích bởi nó phải theo giấy phép tương thích GPL? ! Do đó, thông dịch viên [được cấp phép GPL] . Phần có liên quan là 2 đoạn cuối: [...] Một trường hợp tương tự và rất phổ biến khác là cung cấp cho các thư viện trình thông dịch do chính họ diễn giải. Chẳng hạn, Perl đi kèm với nhiều mô-đun Perl [...]
Chris Wesseling

1
«Chương trình thông dịch, đối với người phiên dịch, chỉ là dữ liệu; giấy phép phần mềm miễn phí như GPL, dựa trên luật bản quyền, không thể giới hạn dữ liệu bạn sử dụng trình thông dịch. Bạn có thể chạy nó trên bất kỳ dữ liệu nào (chương trình được thông dịch), theo bất kỳ cách nào bạn muốn và không có yêu cầu nào về việc cấp phép dữ liệu đó cho bất kỳ ai. »Đây là về việc chạy các chương trình trong bất kỳ giấy phép nào kể cả trình thông dịch GPL phải không? Không bao gồm chủ đề sử dụng plugin không miễn phí trong chương trình GPL bằng ngôn ngữ được dịch.
tuxayo

4

Lưu ý: đây là một câu hỏi pháp lý. Lập trình viên.SE không phải là một diễn đàn hợp pháp, nó là một diễn đàn lập trình. Mặc dù người dân ở đây biết khá nhiều về lập trình, nhưng họ không biết gì về luật pháp. Nếu bạn muốn hỏi một câu hỏi pháp lý, bạn nên hỏi rằng trong một diễn đàn pháp lý, nơi có những người thực sự biết điều gì đó về vấn đề này.


GPL không nói gì về liên kết tĩnh hoặc động. Nó thậm chí không nói bất cứ điều gì về liên kết ở tất cả . Mỗi luật sư hoặc thẩm phán mà tôi nói chuyện đều nói rằng vấn đề liên kết tĩnh và động là hoàn toàn không liên quan.

Bản quyền là về sự sáng tạo. Liên kết tĩnh so với động là một chi tiết thực hiện kỹ thuật. Cho dù một cái gì đó được liên kết tĩnh hay động không phải là một hành động sáng tạo, nó không thể thay đổi trạng thái bản quyền của tác phẩm.

Trong câu hỏi của bạn, bạn nói về "ngôn ngữ được giải thích". Nhưng thuật ngữ đó không có ý nghĩa: không có thứ gọi là ngôn ngữ được diễn giải. Một ngôn ngữ là một tập hợp trừu tượng của các quy tắc và hạn chế toán học. Một ngôn ngữ không được giải thích hoặc biên dịch. Một ngôn ngữ chỉ . Thuật ngữ "ngôn ngữ diễn giải" không chỉ sai , nó không nhạy cảm . Nếu tiếng Anh là ngôn ngữ đánh máy, đó sẽ là một lỗi loại.

Giải thích và biên dịch là đặc điểm của trình thông dịch hoặc trình biên dịch (duh!), Chứ không phải ngôn ngữ. Mọi ngôn ngữ có thể được thực hiện với một trình thông dịch, và mọi ngôn ngữ có thể được thực hiện với một trình biên dịch. Hầu hết các ngôn ngữ đều có cả. Hầu hết việc thực hiện ngôn ngữ hiện đại thậm chí kết hợp cả hai trong một công cụ thực thi.

Ví dụ, Triển khai Ruby Rubinius chứa trình biên dịch trước thời gian tĩnh biên dịch mã Ruby thành mã byte Rubinius, trình thông dịch phiên dịch mã byte Rubinius và trình biên dịch chỉ trong thời gian động để biên dịch mã byte Rubinius thành LLVM IR, cơ sở hạ tầng LLVM lần lượt biên dịch thành mã máy gốc. Việc triển khai MacRuby Ruby hoàn toàn không chứa trình thông dịch, nó biên dịch mã Ruby trực tiếp sang LLVM IR, sau đó tiếp tục thành mã máy gốc.

Mặt khác, có các thông dịch viên cho C hoặc C ++.

Tất cả điều này chỉ là chi tiết kỹ thuật. Nó hoàn toàn không liên quan đến bản quyền.

Điều đó không có nghĩa là việc ai đó có vi phạm bản quyền của người khác hay không tùy thuộc vào việc người thứ ba chọn chạy chương trình với người phiên dịch hay biên dịch trước.

Câu hỏi là liệu một tác phẩm có bắt nguồn từ một tác phẩm khác hay không. Nó có thể được liên kết động và vẫn có nguồn gốc, và nó có thể được liên kết tĩnh và không có nguồn gốc nào cả.


Điều gì về giải thích các ngôn ngữ "mã trung gian"? Một trong những nguyên tắc đằng sau GPL là bất kỳ ai cũng có thể điều chỉnh chương trình với bất kỳ máy hợp lý nào có cùng các công cụ ngôn ngữ có sẵn như bản gốc. Nếu ai đó phát hành mã nguồn cho trình thông dịch mã trung gian, cùng với một loạt mã dạng trung gian mà nó có thể chạy, thì các quy tắc để phát hành thông tin liên quan đến blob mã trung gian đó là gì? Không giống như các tệp thực thi được biên dịch, dành riêng cho máy, blob mã trung gian sẽ hoàn toàn di động.
supercat

Lấy làm tiếc; Tôi sẽ hỏi trên stackoverflow.com và nó đề nghị tôi hỏi ở đây thay vào đó khi tôi sử dụng thẻ "gpl"! Đây có phải là loại thảo luận bị cấm ở đây không? exec ("luật sư killall -9"); : D
ekolis

Và vâng, tôi đồng ý rằng điều đó không có nghĩa là một chi tiết triển khai sẽ không có hiệu lực đối với tình trạng pháp lý của việc tái sử dụng; Tôi chỉ nghĩ rằng có một sự khác biệt như vậy và đang yêu cầu làm rõ!
ekolis

2
@ekolis: nó không bị cấm, mỗi người. Chỉ là nó không phải là một ý tưởng tốt để đặt câu hỏi pháp lý của những người không biết gì về vấn đề pháp lý (như lập trình viên, ví dụ), khi có những người làm biết về các vấn đề pháp lý (hay còn gọi là luật sư), bạn có thể hỏi để thay thế. Tôi không có gì chống lại luật sư, hoàn toàn ngược lại. Nhưng tôi sẽ không hỏi ai về lời khuyên thuật toán và tôi cũng không hỏi một lập trình viên về lời khuyên pháp lý.
Jörg W Mittag

IANAL: Nó có thể là một chi tiết kỹ thuật, nhưng nó vẫn tạo ra sự khác biệt lớn, bởi vì nó thay đổi những gì đang được phân phối theo một cách có ý nghĩa pháp lý. Với liên kết tĩnh, bạn đang xây dựng một công việc kết hợp, theo quy tắc của GPL, không thể được phân phối bên ngoài GPL. Với liên kết động, bạn cũng có thể thực hiện việc này, ví dụ: nếu bạn đóng gói các thư viện với phần mềm của mình trong tệp ZIP. Nhưng với liên kết động, bạn có thể phân phối nó mà không cần thư viện và đó là 100% công việc của bạn, ngay cả khi nó không tự hoạt động. Và dĩ nhiên, bạn vẫn có thể cung cấp các thư viện theo GPL.
flarn2006

0

Không biết có bao nhiêu sự thật trong đó, và IANAL, v.v.; nhưng theo cách hiểu của tôi, điều quan trọng là liệu thư viện mà bạn liên kết có ở dạng nào đó được bao gồm trong "nhị phân" (trong đó "nhị phân", trong trường hợp ngôn ngữ lập trình động, chỉ là mã nguồn như được phân phối, đây là những gì tôi đưa ra về định nghĩa "nhị phân" của FSF trong bối cảnh này).

Vì vậy, nếu bạn tham chiếu các thư viện từ mã của mình mà không đưa chúng vào phân phối của mình, tôi sẽ coi đây là tương đương với "liên kết động", trong khi nếu bạn kết hợp các thư viện với sản phẩm của mình hoặc sao chép các phần của thư viện vào mã của riêng bạn, kịch bản "liên kết tĩnh" sẽ được áp dụng. Điều này, ít nhất, theo tinh thần của GPL: bạn có thể tự do sử dụng (chạy, kiểm tra, tham khảo) phần mềm GPL mà không bị hạn chế, nhưng ngay khi bạn lấy từ nó (bằng cách liên kết hoặc sao chép các phần của nó vào sản phẩm có thể phân phối riêng), nó bị virus và phần mềm của bạn cũng phải là GPL.

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.