2009-12-06 29 views
17

Microsoft tạo cửa sổ của họ và thư viện DLL MFC, v.v. Một nguồn mở phát triển viết một ứng dụng MFC mới và phát hành mã nguồn là GPL. Ứng dụng phải liên kết với MS DLL/thư viện để chạy trong Windows, nhưng tôi không nghĩ rằng bất kỳ ai cũng có thể tranh luận rằng bây giờ chúng ta có quyền ép buộc GPL của Microsoft.Mã GPL có liên kết với thư viện độc quyền hay không phụ thuộc được tạo ra đầu tiên?

Điều này có nghĩa là giấy phép GPL thực sự phụ thuộc vào loại giấy phép nào được "tạo" trước tiên không? Nếu thư viện độc quyền được tạo đầu tiên (chẳng hạn như Windows DLL) được xuất bản mà không cần liên kết và mã GPL và sau đó chương trình GPL được liên kết với nó, thì chương trình GPL không thể chuyển đổi thư viện độc quyền thành GPL. "được liên kết" với mã GPL.

Nếu trường hợp này xảy ra, công ty có thể thực hiện những công việc như vậy không? Giả sử họ muốn giữ thư viện giải mã phương tiện giải mã HDDecoding độc quyền riêng tư, nhưng họ cũng muốn "tận dụng" mã GPL được mở để giới thiệu phần cứng của họ.

  1. Chúng tạo thư viện độc quyền để thực hiện giải mã phương tiện và phát hành một số mã mẫu.
  2. Ai đó (phát triển nguồn mở) tạo "plugin" được liên kết vào thư viện độc quyền này cho mã GPL như XBMC, Mplayer hoặc VLC.
  3. Họ có thể lập luận rằng vì họ đã tạo ra thư viện độc quyền đầu tiên (giống như MS tạo tất cả các tệp DLL đầu tiên), các chương trình GPL liên kết với mã độc quyền của chúng không đưa chúng vào mã GPL.

Một lý thuyết có thể cho rằng nhà phát triển mã nguồn mở tạo tệp GPL vlc.exe liên kết với thư viện bộ giải mã phương tiện độc quyền NVidia đang vi phạm giấy phép GPL.

Điều đó có nghĩa là tất cả các chương trình GPL chạy trong Windows như VLC, git, cygwin, v.v. đều vi phạm giấy phép GPL vì chúng chắc chắn cần liên kết với Thư viện Microsoft Windows độc quyền để chạy.

Trường hợp 2: Có gì sai với điều này:

NVidia có thể tạo một thư viện trừu tượng phần cứng mới mà giấu đi những chức năng đồ họa mới nhất. Họ cũng tạo một trình điều khiển FreeBSD với thư viện này và phát hành mã nguồn của trình điều khiển BSD nhưng không phải mã nguồn thư viện.

Ai đó (nhà phát triển Linux) có thể triển khai trình điều khiển Linux liên kết với thư viện này để tạo trình điều khiển đồ họa NVIDIA cho Linux. Nhưng kể từ khi NVidia không làm điều này, họ có thể giữ cho thư viện nguồn "ẩn" trong khi cho phép "hỗ trợ Linux".

Chắc chắn vi phạm tinh thần của GPL.

Điều đó có nghĩa là chạy bất kỳ exe nào được tạo bằng nguồn GPL trong Windows/Mac/Iphone/PSP3 cũng vi phạm tinh thần của GPL?

+4

Tôi đang bỏ phiếu để đóng câu hỏi này dưới dạng chủ đề vì ** đó là về cấp phép hoặc các vấn đề pháp lý **, không phải là lập trình hoặc phát triển phần mềm. [Xem tại đây] (http: //meta.stackoverflow.com/a/274964/1402846) để biết chi tiết và [help/on-topic] để biết thêm. –

Trả lời

8

Từ FAQ GNU GPL:

Can I apply the GPL when writing a plug-in for a non-free program?

Nếu chương trình sử dụng nĩa và exec để invoke plug-in, sau đó các plug-in là chương trình riêng biệt, vì vậy giấy phép cho chương trình chính không yêu cầu cho chúng.Vì vậy, bạn có thể sử dụng GPL cho một plugin và không có yêu cầu đặc biệt .

Nếu chương trình tự động liên kết plug-in, và họ làm cho chức năng gọi cho mỗi dữ liệu khác và chia sẻ cấu trúc, chúng tôi tin rằng chúng tạo thành một chương trình duy nhất , mà phải được xử lý như một phần mở rộng của cả hai chính chương trình và trình cắm. Điều này có nghĩa là rằng sự kết hợp của trình cắm thêm được GPL bảo hiểm với chương trình chính không miễn phí sẽ vi phạm GPL. Tuy nhiên, bạn có thể giải quyết vấn đề pháp lý đó bằng cách thêm ngoại lệ cho giấy phép của trình cắm của bạn, cho phép liên kết nó với chương trình chính không miễn phí.

Xem thêm câu hỏi I am writing free software that uses a non-free library.

Và:

What legal issues come up if I use GPL-incompatible libraries with GPL software?

Cả hai phiên bản của GPL có một ngoại lệ để copyleft của họ, thường được gọi là thư viện hệ thống ngoại lệ. Nếu các thư viện không tương thích với GPL mà bạn muốn sử dụng đáp ứng các tiêu chí cho thư viện hệ thống , thì bạn không phải sử dụng bất kỳ điều gì đặc biệt để sử dụng chúng; yêu cầu để phân phối mã nguồn cho toàn bộ chương trình không bao gồm các thư viện đó, ngay cả khi bạn phân phối tệp thực thi có liên quan chứa chúng.

Tiêu chí cho những gì được tính là "thư viện hệ thống" khác nhau giữa các phiên bản khác nhau của GPL. GPLv3 định nghĩa rõ ràng "Thư viện hệ thống" trong phần 1, để loại trừ từ định nghĩa của "Nguồn tương ứng". GPLv2 nói sau, gần cuối của phần 3:

Tuy nhiên, như một ngoại lệ đặc biệt là mã nguồn được phát hành không cần phải bao gồm bất cứ điều gì đó là bình thường phân phối (trong hoặc nguồn hoặc dạng nhị phân) với các thành phần chính (trình biên dịch, hạt nhân, v.v.) của hệ điều hành mà trên đó hoạt động thực thi , trừ khi thành phần đó chính nó đi kèm với tệp thực thi.

...

+0

Một câu hỏi. Máy ảo. ví dụ. Linux bên trong Hyper-V. Nó chạy GPL trong một quá trình duy nhất máy chủ oh. CHIA SẺ ĐẾN Plugin, sử dụng thư viện liên kết động (API có thể hoặc không thể mở) Tuy nhiên, nó đang chạy GPL trong một máy chủ lưu trữ quá trình đơn lẻ. Tóm lại, tất cả đều giống nhau - "một số tính năng được cung cấp bởi mã GPL không được cung cấp bởi quy trình máy chủ. API không chặt chẽ tùy thuộc vào ứng dụng vùng chứa. Mã có thể chạy trực tiếp, diễn giải hoặc JIT-ed". Vậy, điểm khác biệt chính là gì? và GPL mô tả nó ở đâu? (Tôi đặt cược không có lập trình viên đọc và nổi tiếng chi tiết pháp lý GPL) –

+0

Điều quan trọng cần lưu ý là không phải ai cũng đồng ý với phiên bản GPL của FSF. –

+0

Điều đó có thể xảy ra, nhưng vì FSF là tác giả của GPL (nó có bản quyền của họ), tôi nghĩ rằng mọi thủ tục pháp lý liên quan đến các điều kiện của GPL sẽ tạo ra một số cân nặng khá lớn cho ý kiến ​​của họ. Tôi đoán rằng những điều duy nhất có thể vượt qua ý kiến ​​của FSF đáng kể là mong muốn của tác giả về phần mềm GPL cụ thể được đề cập hoặc nếu có vấn đề pháp lý thực sự với GPL. Tất nhiên, kiến ​​thức pháp lý thực sự của tôi dựa trên những gì tôi đọc trên mặt sau của hộp ngũ cốc trong bữa sáng, vì vậy thực sự tôi có lẽ không nên bình luận. –

0

IANAL, nhưng trật tự sáng tạo không quan trọng. Nếu liên kết hai nhị phân sẽ là vi phạm GPL, thì nó không được GPL cho phép, bất kể nó được tạo ra trước tiên.

Trường hợp 1 được giải quyết bởi ngoại lệ của thư viện hệ thống, như Michael Burr đã trích dẫn. Lưu ý rằng nó không phụ thuộc vào thời gian - nếu nó không phải là ngoại lệ của thư viện hệ thống, nó sẽ là phần lớn vi phạm GPL để chạy mã GPL được viết vào năm 2003 trên Windows 98 (được viết trước mã GPL) vì nó sẽ chạy nó trên Vista (được viết sau mã GPL).

Tôi đồng ý rằng trường hợp 2 vi phạm tinh thần của GPL, nhưng, như thuật ngữ được sử dụng bởi GPL, trình điều khiển NVidia không được "liên kết" với hạt nhân Linux vì nó được tải dưới dạng mô-đun. Bạn sẽ không thể phân phối một hạt nhân Linux với nhị phân không phải là miễn phí NVidia liên kết tĩnh vào nó, nhưng ai phân phối các hạt nhân liên kết tĩnh vào những ngày này dù sao đi nữa?

5

Bạn có một sự hiểu lầm cơ bản về cách thức mà các hạn chế GPL có hiệu lực. Ví dụ đầu tiên của bạn được bao phủ bởi "miễn trừ thư viện hệ thống" - nhưng ngay cả khi nó không được, nó sẽ không có tác dụng bạn đặt ra.

GPL nói rằng nếu bạn phân phối chương trình GPL hoặc đạo hàm, bạn cũng phải cung cấp nguồn cho chương trình hoặc đạo hàm theo các điều khoản tương đương GPL (cho những người mà bạn phân phối chương trình/đạo hàm cho).

Điều này có nghĩa là nếu tôi phân phối chương trình GPL của bạn được liên kết với một số mã của Microsoft, tôi phải cung cấp nguồn gốc cho toàn bộ bóng sáp hoặc nguy cơ bị bạn kiện kiện vì vi phạm bản quyền của bạn. Lưu ý rằng miễn là Microsoft là bên thứ ba, điều này không đặt bất kỳ hạn chế nào đối với chúng (tất nhiên!). Nếu tôi không có quyền truy cập vào mã của Microsoft, có khả năng là tôi không thể phân phối tác phẩm phái sinh đó mà không vi phạm giấy phép của bạn.

0

Bạn không thể thay đổi giấy phép chương trình khác bằng cách liên kết với chúng, không bao giờ. Nếu giấy phép của bạn không cho phép liên kết đến các chương trình nguồn mở, bạn phải thay đổi giấy phép của bạn hoặc ngừng liên kết đến các chương trình đó. Tình huống sẽ khác nếu các chương trình khác liên kết với bạn. Trong trường hợp đó, họ phải cahnge giấy phép của họ hoặc ngừng liên kết đến chương trình của bạn.

0

Điều đó có nghĩa là bạn không thể áp dụng GPL ở đầu mã hoặc thư viện không phải là compatible with the GPL và phân phối tác phẩm được tổng hợp được biên dịch trừ khi bạn áp dụng linking exception.

Ngoại lệ liên kết cung cấp cách để bạn phân phối tệp thực thi đã biên dịch có chứa các bit không miễn phí, trong khi không cần sự cho phép đặc biệt để phân phối chương trình ở định dạng nguồn.

Ngoại lệ này, tất nhiên, phụ thuộc vào các thư viện không miễn phí cho phép bạn phân phối các chương trình được liên kết với nó (đặc biệt là tĩnh).

Vì vậy, để trả lời câu hỏi đầu tiên của bạn, không .. đây không phải là kịch bản 'gà hoặc trứng'. Những gì tôi đề nghị là khi đối mặt với khả năng phải viết một ngoại lệ, tốt hơn hết là chỉ cần chọn một giấy phép có ít hạn chế hơn, như giấy phép BSD Apache hoặc 3 khoản.

Thứ hai, không, bạn không thể chỉ áp dụng GPL cho mã của bạn vì mục đích thay đổi giấy phép cho một điều gì đó mà bạn tình cờ liên kết. Một lần nữa, chúng tôi trở lại ngoại lệ liên kết, đó là trách nhiệm của bạn để cung cấp.

spririt của GPL sống trong một thế giới không có phần mềm độc quyền như vậy. RMS đã tuyên bố đây là mục tiêu cuối cùng trong nhiều dịp. Những gì còn lại là thực tiễn phải được giải quyết cho những người muốn phân phối phần mềm miễn phí trên nền tảng không miễn phí.

Đây là một trong những lý do lớn nhất mà Linux (như trong hạt nhân) vẫn chỉ GPL v2.

Các vấn đề liên quan