2009-03-26 15 views
5

Tôi đang bắt đầu xây dựng một ứng dụng thương mại sử dụng thư viện nguồn mở. Tôi đã poring trên các tài liệu khác nhau và đăng, nhưng tôi vẫn gặp rắc rối. Từ những gì tôi hiểu tôi cần "cô lập" phần nguồn mở. Một cách để làm điều này là cung cấp một lớp giao tiếp với nguồn mở thông qua các liên kết "vani".Tôi có thể phát hành một thư viện nguồn mở được liên kết với một sản phẩm nguồn đóng theo các quy tắc GPL không?

Giải pháp được đề xuất là sửa đổi mã nguồn mở (tiện ích dòng lệnh) để cung cấp cho nó một số loại API. Sau đó, phát triển một trình bao bọc hoặc chương trình proxy sử dụng API để giao tiếp với chương trình nguồn mở. Phát hành nguồn đã sửa đổi và trình bao bọc dưới dạng nguồn mở, nhưng giữ phần còn lại của nguồn đóng. Lưu ý rằng đoạn mã nguồn mở sẽ được gửi cùng với mã và được thực hiện dưới dạng thư viện được liên kết tĩnh hoặc động.

Tính năng này có hoạt động theo GPL không?

+4

Tôi bỏ phiếu để đóng câu hỏi này như off-topic vì ** đó là về việc cấp phép hoặc các vấn đề pháp lý **, không phải lập trình hay 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. –

+1

Tôi nghĩ điều đó đáng giá, bởi vì các nhà phát triển cần phải đối mặt với các câu hỏi GPL và nó chắc chắn tác động đến cách họ tạo ra các chương trình. Ví dụ. khi tôi hỏi câu hỏi trên, phản hồi đã giúp tôi tránh xa giải pháp được liên kết và tôi đã sử dụng mô hình truyền thông dựa trên socket. –

Trả lời

5

Không, nếu đó là GPL và bạn liên kết với nó, mã của bạn cũng trở thành GPL. Nếu đó là LGPL, mọi thứ khác nhau (bạn có thể xây dựng các ứng dụng thương mại được liên kết với các thư viện được cấp phép của LGPL), nhưng dường như không phải là trường hợp ở đây.

+0

Tôi sợ điều đó (: –

+0

"Không" là chính xác, nhưng phần còn lại là sai. Bạn có thể đặt bất kỳ giấy phép nào bạn muốn trên mã của riêng mình. Tuy nhiên, nếu bạn muốn phân phối kết quả cho người khác, nó phải Là một giấy phép GPL-compatabile –

+0

Tôi có đề xuất khác không? Và bạn ngụ ý gì về "tương thích GPL"? Ví dụ về giấy phép như vậy, xin vui lòng? –

0

Trước khi bắt đầu, tôi nên nói rằng tôi không phải là luật sư và điều này không nên được coi là lời khuyên pháp lý. Nếu bạn cần tư vấn pháp lý, bạn nên thuê một luật sư.

Miễn là bạn đang liên kết chương trình của mình với phần mềm GPL, phần mềm của bạn được coi là tác phẩm phái sinh của phần mềm GPL.

Nếu bạn muốn sử dụng một phần của phần mềm GPL, bạn nên phát hành phần mềm của mình theo giấy phép GPL hoặc giấy phép tương thích GPL. Nếu không, bạn nên tìm một phần mềm khác để thực hiện những gì bạn cần hoặc tự viết nó. Điểm của GPL là giá cấp giấy phép là bạn cũng phát hành mã nguồn của mình cho tác phẩm phái sinh của bạn theo giấy phép phần mềm miễn phí. Nếu bạn không cân nhắc sử dụng phần mềm sở hữu độc quyền mà không phải trả phí giấy phép thích hợp, bạn không nên sử dụng GPL

Cách duy nhất mà bạn có thể cô lập là bằng cách thực thi hoàn toàn riêng biệt. (ổ cắm, đường ống hoặc thứ gì đó), sao cho phần mềm của bạn hoặc phần mềm GPL có thể được thay thế dễ dàng. Giao diện mà nó giao tiếp trên cần phải có mục đích rất chung chung; nó không thể phụ thuộc vào chi tiết triển khai của phần mềm GPL, chẳng hạn như bố cục dữ liệu nội bộ hoặc bất kỳ thứ gì sắp xếp. Về cơ bản, nếu nó giao tiếp qua một giao thức có thể được sử dụng như một tiêu chuẩn có mục đích chung, thì phần mềm của bạn có thể nói chuyện với phần mềm GPL mà không bị coi là một tác phẩm phái sinh.

Nhưng dù sao, trong khi có thể giao tiếp với một phần của phần mềm GPL từ phần mềm sở hữu độc quyền, bạn không nên đi ra khỏi con đường của bạn để làm như vậy. Bạn sẽ vi phạm tinh thần của GPL, và sẽ phải rất cẩn thận để làm cho giao diện có mục đích chung đủ để không bị tính là vi phạm. Thay vào đó, bạn nên tìm một phần mềm với giấy phép khác để thực hiện những gì bạn cần, tự viết, hoặc phát hành phần mềm của bạn theo giấy phép tương thích GPL.

chỉnh sửa: Có interesting article được đăng trên Linux Weekly News về chủ đề này. Theo phân tích trong bài viết, ngay cả khi bạn tách ra một giao diện mà bạn có thể giao tiếp với phần mềm GPL trên dòng lệnh, bạn nên làm điều đó như một phòng thực hiện sạch với một nhóm làm việc với mã GPL, một nhóm thực hiện phần mềm khác, và tất cả các thông số kỹ thuật đi qua giữa chúng được lọc bởi luật sư. Vì vậy, thực sự, rắc rối hơn nó có giá trị.

+0

Tôi không chắc chắn tôi đồng ý với bạn rằng điều này vi phạm tinh thần của GPL. Trong thực tế, FSF đã nói rõ ràng trong Câu hỏi thường gặp của nó rằng nếu bạn muốn sử dụng mã GPL được từ một ứng dụng không phải GPL, bạn nên làm như vậy thông qua trình bao bọc dòng lệnh hoặc tương tự. Tất nhiên họ muốn bạn không viết nguồn đóng, nhưng ... –

2

Nếu bạn không liên kết với nó, bạn đang ở trong tình trạng rõ ràng.Vì vậy, thay vì phát triển API cho công cụ dòng lệnh nguồn mở này, chỉ cần viết một trình bao bọc nhỏ tương tác trực tiếp với chương trình trên dòng lệnh.

Vì bạn không liên kết, và bây giờ chỉ thực thi mã nhị phân, mã của bạn sẽ không phải được phát hành theo GPL.

Bạn có thể sử dụng fork, pipe, exec và bạn bè để thực hiện việc này! Nó là một giải pháp đơn giản và tùy thuộc vào cách ứng dụng dự đoán đầu vào của nó trên dòng lệnh nó có thể làm việc rất tốt (thứ lời nguyền dựa là khó khăn hơn ... cần một thiết bị đầu cuối của một số loại)

Edit:

Từ các nhận xét có vẻ như thậm chí điều này không hợp lệ và vẫn có thể gây ra sự cố. Tôi khuyên bạn nên liên hệ với luật sư để đảm bảo rằng bạn đang ở trong tình trạng rõ ràng, anh ấy sẽ có thể giải thích GPL và cho bạn biết bạn có thể làm gì và không thể làm gì với mã GPL.

Tôi nghĩ rằng chỉ cần thực hiện một chương trình GPL'ed và sau đó gửi dữ liệu (dữ liệu đường ống vào nó) sẽ không làm cho chương trình của bạn cũng bị GPL'ed.

GPL quá phức tạp, nếu tôi sử dụng công cụ dòng lệnh bằng cách thực thi và chuyển dữ liệu sang chương trình của tôi, chương trình của tôi vẫn có thể trở thành GPL. Điều đó thật kì lạ. Hãy cho tôi BSD, và hoặc MIT bất cứ lúc nào trong ngày, cách đơn giản để hiểu.

+0

Điều này không đảm bảo rằng bạn đang ở trong tình trạng rõ ràng. Nếu bạn cần cấu trúc dữ liệu nội bộ đường ống đến và đi từ ứng dụng riêng biệt, thì chỉ cần có nó trong một quy trình riêng biệt không có nghĩa là bạn đã tránh tạo ra một tác phẩm phái sinh. –

+0

@Brian cảm ơn bạn đã mang đến sự rõ ràng cho điều này. @jack, bạn đang được đưa ra lời khuyên xấu hoặc bởi tôi hoặc bởi những kẻ gièm pha của tôi :). Tôi đề nghị bạn hỏi luật sư, hoặc FSF hoặc SFLC. Họ có lẽ vẫn có một chương trình mà $ 100 giúp bạn nhận được phản hồi bằng email từ một luật sư FSF thực sự. – JasonSmith

+0

Điều này không đúng, xem ví dụ câu chuyện của clisp và readline. – ShreevatsaR

0

Với GPL tôi nghĩ cách duy nhất là bọc nó vào một thứ gì đó giống như đối tượng COM (cũng cần phải là GPL hoặc compatabile) và kết nối với đối tượng lúc chạy. Vì điều này giữ cho bạn khỏi (tĩnh) liên kết với mã GPL, bạn sẽ bị loại bỏ.

Bí quyết đó sẽ hoạt động với mã GPL v2, nhưng có thể không hoạt động với GPLv3.

+0

Liên kết động vẫn đang liên kết. Các heuristic tôi sử dụng là "chia sẻ một bối cảnh thực hiện" ... IANAL, YMMV, vv quảng cáo. nauseum – dmckee

+0

Đây không phải là câu hỏi được giải quyết: http://gnuwin32.sourceforge.net/license.html – mkb

+0

Đúng. Tôi nghĩ rằng tôi đã cố gắng để có được cái gì khác với đối tượng COM mặc dù. Đó thực sự là một bước hoàn toàn bị loại bỏ khỏi những gì chúng tôi thậm chí còn nghĩ là "liên kết động". Những gì bạn đang thực sự làm ở đó là gọi một chương trình riêng biệt và giao tiếp với nó. –

0

Đừng tin những người nói về cuộc gọi thủ tục từ xa (COM) hoặc IO chuẩn. Nếu có bất cứ điều gì ở tất cả, điều IO tiêu chuẩn xuất phát từ các tình huống kế thừa như đường ống đầu ra của bạn để grep và đường ống mà vào một số ứng dụng khác.

Thay vào đó, hãy nghĩ về nó theo cách này: Ứng dụng của bạn có phải là một tác phẩm có nguồn gốc từ thành phần GPL không? Bạn có thể giải thích, với một người cư xử hợp lý thông minh, tại sao ứng dụng của bạn không phải là một dẫn xuất của thư viện nguồn mở. Bạn có thể giải thích các trình bao bọc stdio và các giao diện COM cho đến khi bạn có màu xanh mặt, nhưng luật sư, thẩm phán, khách hàng của bạn hoặc bất kỳ ai sẽ không mua nó. Thay vào đó, bạn phải chứng minh rằng việc loại bỏ thư viện GPL đó sẽ không thay đổi đáng kể hoạt động của ứng dụng của bạn. Nếu bạn không thể làm điều đó, tốt, xin lỗi, nhưng bạn đang ở trên băng mỏng.

+0

GNU tin rằng IO chuẩn là OK. Xem http://stackoverflow.com/questions/392395/a-gui-wrapper-around-a-gpl-cli-application-is-it-a-derivative/392452#392452 – dmckee

+0

Đối số đó có vẻ ngây thơ. Ví dụ, các ứng dụng gọi syscalls của hệ điều hành Linux không được coi là các tác phẩm có nguồn gốc, nhưng nếu bạn loại bỏ hệ điều hành, ứng dụng sẽ không hoạt động. –

+1

Oh Tôi xin lỗi, tôi quên các thẩm phán biết tất cả về liên kết tĩnh và động so với IO tiêu chuẩn. Đó là tất cả về các tác phẩm phái sinh. Một ứng dụng POSIX có thể syscall vào hạt nhân Linux tất cả nó muốn và nó vẫn không có nguồn gốc vì hệ điều hành không xác định nhân vật của chương trình. – JasonSmith

0

Hãy nhận biết, có nhiều cách giải thích khác nhau về GPL khi có người, chỉ là về.

Tôi không phải là luật sư, nhưng tôi đã nói chuyện với luật sư về chủ đề này. Đây không phải là tư vấn pháp lý.

Một số luật sư cho rằng liên kết động với GPL là ok và không cấu thành một tác phẩm có nguồn gốc. Những người khác, chẳng hạn như RMS và luật sư của ông tin rằng liên kết động không phải là OK và không cấu thành một công việc có nguồn gốc. Hầu hết tin rằng liên kết tĩnh là một công việc có nguồn gốc.

Có rất nhiều tranh luận về chủ đề này, và không có quy luật dứt khoát xác định những gì là và không phải là một công việc có nguồn gốc trong lĩnh vực này.

Xem, ví dụ This Article

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