I am developing a WPF program (Program1) which can read/write data in my PostgreSQL Database. However, when I start to develop the Print PDF function, I found that the free PDFSharp/MigraDoc cannot print Asian Language Characters. So I have to find another PDF library.

I know that there are some Commercial Library which can do the job but I want to reduce the cost. Some of them provide a GPL or AGPL License Library, I want to use them in my commercial project.

Currently my plan is to develop a separate program (Program2) which can receive arguments. Program2 will use the arguments to call data from my PostgreSQL database and generate the PDF using the GPL or AGPL Licensed Library. The Program2 will be a Open-Source program which use the same License of the PDF Library.

Program1 will use Process.Start and ProcessStartInfo to start the Program2 with arguments for generating the PDF.

I would like to know if my plan is legal as I am not familiar with the licensing problem. Do I also need to make Program1 or the PostgreSQL Database generating script Open-Source?


It is not possible to give a definitive answer if your plan complies with the GPL license restrictions or not.

Your Program2 can be seen as a plugin for Program1, and the GPL FAQ has this to say about plugins:

When is a program and its plug-ins considered a single combined program?

It depends on how the main program invokes its plug-ins. If the main program uses fork and exec to invoke plug-ins, and they establish intimate communication by sharing complex data structures, or shipping complex data structures back and forth, that can make them one single combined program. A main program that uses simple fork and exec to invoke plug-ins and does not establish intimate communication between them results in the plug-ins being a separate program.

If the main program dynamically links plug-ins, and they make function calls to each other and share data structures, we believe they form a single combined program, which must be treated as an extension of both the main program and the plug-ins. If the main program dynamically links plug-ins, but the communication between them is limited to invoking the ‘main’ function of the plug-in with some options and waiting for it to return, that is a borderline case.

Using shared memory to communicate with complex data structures is pretty much equivalent to dynamic linking.

The second and third paragraph don't apply, because you use fork and exec to call the plugin, but we can't tell if the database you are using to communicate with Program2 establishes communications that are considered intimate enough to consider Program1 and Program2 to be a single combined program. That depends entirely on the details on what data is being shared.

And be prepared that your system will be scrutinized carefully, because you are clearly attempting to circumvent the need to buy a commercial license and the vendor of the PDF library might do their own check if you are in compliance with the GPL terms.

  • Thank you for your remind, Bart. I will look at the cases about whether database is the sharing complex data structures.
    – testcb00
    Oct 12 at 7:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.