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.