Sử dụng C ++ / Java để phát triển phần mềm cho mục đích thương mại


9

Tôi dự định phát triển một chương trình mà tôi dự định sẽ bán sau này. Tôi đang cố gắng quyết định một ngôn ngữ để mã hóa nó và đã thu hẹp thành C ++ hoặc Java.

Tôi đã xem qua các giấy phép GPL v2 và v3 được sử dụng cho GCC và OpenJDK của GNU (vâng, tôi có thể hiểu một số nội dung pháp lý, nhưng rõ ràng, không phải tất cả trong số đó). Nhưng có một điểm mà mọi người đều mơ hồ (điều này đáng lẽ phải là một trong những điều đầu tiên được trả lời, IMO): nếu tôi phát triển một chương trình bằng C ++ / Java và biên dịch nó bằng trình biên dịch GCC hoặc trình biên dịch OpenJDK, tôi có thể bán nó mà không cần để đặt chương trình của tôi theo GPL là tốt?

Theo như tôi có thể nhận ra, tôi có toàn quyền chỉ định bất kỳ giấy phép nào cho chương trình của mình, nhưng, có một nhược điểm: trong giấy phép tôi không nên liên kết với bất kỳ thư viện nào thuộc GPL. Nếu vậy, tôi sẽ phải phát hành chương trình của mình theo GPL.

Bây giờ, tôi không biết những gì trong C ++ / Java được coi là một thư viện, vì vậy nếu tôi sử dụng những thứ bình thường trong C ++ (iostream, list, map, v.v.) hoặc các lớp / giao diện Java bình thường có sẵn như là một phần của JDK tiêu chuẩn 6 phân phối (Chuỗi, Danh sách, Bản đồ, v.v.), điều này có tạo thành 'liên kết đến các thư viện' không?


1. Chúng tôi không làm tư vấn pháp lý ở đây. 2. 'C ++ / Java' là gì? 3. Nhìn xung quanh và thấy hàng ngàn và hàng ngàn sản phẩm phần mềm thương mại được viết bằng Java, nhiều sản phẩm có các thành phần JNI.
bmargulies

1
/ Trong C ++ / Java chỉ được sử dụng như một từ viết tắt của "hoặc", tiếng Anh hoàn toàn hợp lệ.
Robin Green

Điều này nghe có vẻ như một câu hỏi cho opensource.stackexchange.com . (Nếu nó chưa được trả lời ở đó.)
Kevin Krumwiede 16/07/2016

Câu trả lời:


13

nếu tôi phát triển chương trình bằng C ++ / Java và biên dịch nó bằng trình biên dịch GCC hoặc trình biên dịch OpenJDK, tôi có thể bán chương trình đó mà không phải đặt chương trình của mình theo GPL không?

Đúng. GPL đặc biệt loại trừ đầu ra của việc chạy chương trình:

đầu ra từ Chương trình chỉ được bảo hiểm nếu nội dung của nó tạo thành một tác phẩm dựa trên Chương trình (độc lập với việc được thực hiện bằng cách chạy Chương trình).

điều đó có nghĩa là nếu bạn bao gồm các bit của GCC hoặc một cái gì đó GPLed khác trong chương trình của bạn, thì có, nó sẽ phải là GPLed, nếu không thì - thực tế là mã đối tượng của nó được tạo bởi trình biên dịch GPLed không liên quan đến việc nó có nên được GPLed không .

Tất cả các thư viện ngôn ngữ tiêu chuẩn bạn sẽ liên kết đến không phải là GPLed hoặc là GPLed nhưng có một ngoại lệ đặc biệt để cho phép phần mềm độc quyền của bạn liên kết với chúng, nếu bạn không sửa đổi chúng . Trong trường hợp của C ++, ý tôi là libgcc, glibc và libstdc ++; trong trường hợp của Java, ý tôi là tất cả các thư viện có trong JRE.

Về mặt kỹ thuật, dù sao bạn cũng có thể bán phần mềm GPL một cách hợp pháp, nhưng hầu như không ai kiếm được tiền từ việc này.


LGPL (GPL nhỏ hơn) cho phép một ứng dụng liên kết với nó mà không yêu cầu ứng dụng đó phải là chính GPLd. Một thư viện GPL mặt khác là truyền nhiễm. Nhưng bạn đã đúng, đầu ra của trình biên dịch được loại trừ rõ ràng khỏi các điều khoản GPL.
Berin Loritsch

và nếu tôi sửa đổi các thư viện ngôn ngữ tiêu chuẩn thì sao? tôi có thể làm được không Điều gì xảy ra với giấy phép của chương trình của tôi sau đó?
piotrek

Sau đó, ngoại lệ không áp dụng và bạn phải tuân theo các điều khoản đầy đủ của giấy phép có liên quan. Ngoài ra, có các hàm ý nhãn hiệu trong trường hợp Java - tốt hơn là không đề cập đến Java hoặc OpenJDK trong tài liệu hoặc quảng cáo của bạn nếu bạn đang sử dụng nó (nhưng hãy xem vụ kiện của tòa án Oracle v Google).
Robin Green

8

Cả GCC và OpenJDK đều có ngoại lệ rõ ràng:

Khi bạn sử dụng GCC để biên dịch chương trình, GCC có thể kết hợp các phần của tệp tiêu đề GCC nhất định và thư viện thời gian chạy với chương trình được biên dịch. Mục đích của Ngoại lệ này là cho phép biên dịch các chương trình không phải GPL (bao gồm cả độc quyền) để sử dụng, theo cách này, các tệp tiêu đề và thư viện thời gian chạy được bao phủ bởi Ngoại lệ này. Giáo dục

Khi lớp GNU được sử dụng không được sửa đổi làm thư viện lớp lõi cho máy ảo, trình biên dịch cho phần mở rộng java hoặc cho một chương trình được viết bằng ngôn ngữ lập trình java, nó không ảnh hưởng đến việc cấp phép để phân phối trực tiếp các chương trình đó



0

OpenJDK là GPL nhưng ngoại lệ để liên kết với các thư viện. http://en.wikipedia.org/wiki/OpenJDK

Sử dụng các lớp OpenJDK sẽ tạo thành liên kết đến một thư viện mà tôi nghĩ (rt.jar).

Một thư viện trong bối cảnh đó, theo quan điểm của Java, chắc chắn là một nhóm phụ thuộc, chiến tranh, giai cấp, v.v. Sun đã không có hành động pháp lý hơn.


Điều tương tự cũng đúng với libstdc ++ - nó cũng có một ngoại lệ.
Robin Green

Cả rt.jar và libstdc ++ đều là các triển khai của một đặc tả không phải là GPL. Về cơ bản, nếu tôi liên kết ứng dụng của mình với phiên bản libstdc ++ không phải GPL'd thì nó sẽ hoạt động giống hệt nhau (giả sử thông số kỹ thuật được triển khai đúng cách) trong cả hai phiên bản. Thực tế là một nền tảng tải động phiên bản GPL của thư viện không được tính vào ứng dụng của bạn. Bạn đã viết cho tiêu chuẩn nền tảng và được bảo vệ theo bất kỳ giấy phép nào bạn muốn.
Berin Loritsch

0

Đừng lo lắng, đây là một câu hỏi lập trình máy tính, hoặc ít nhất là một câu hỏi liên quan chặt chẽ đến các lập trình viên.

Từ những gì tôi biết, nếu bạn tạo phần mềm được liên kết với một số mã GPL, bạn phải phát hành mã nguồn nếu bạn phân phối chương trình của mình.

Điều đó không có nghĩa là bạn phải phát hành mã của mình cho sourceforge tức là Nhưng nếu bên thứ ba yêu cầu bạn cung cấp mã, bạn phải cung cấp mã đó.


Điểm đó không liên quan vì hoạt động được mô tả trong câu hỏi không, những thứ khác bằng nhau, liên quan đến việc liên kết với mã GPL.
Robin Green

Câu hỏi ở trên: nếu tôi phát triển chương trình bằng C ++ / Java và biên dịch chương trình đó bằng trình biên dịch GCC hoặc trình biên dịch OpenJDK, tôi có thể bán chương trình đó mà không phải đặt chương trình của mình theo GPL không?

Tôi nghĩ rằng tôi đang xác định rõ ràng rằng nếu bạn sử dụng mã GPL, bạn phải phát hành.

Xin lỗi, tôi đã không chính xác - trong một số trường hợp liên quan đến việc liên kết với mã GPL theo một số ý nghĩa, nhưng ví dụ, ngoại lệ Classpath được áp dụng, do đó bạn không phải phát hành mã của mình theo GPL.
Robin Green

à, được rồi, không biết về điều đó
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.