I am planning to include a program covered by the GNU General Public License and a GPL-incompatible program in a collective work designed for a machine that executes programs from a cartridge containing an execute-in-place parallel ROM and an MMU. The MMU divides the memory into pages and makes only one visible to the CPU at once. One or more programs can be stored in a page. The only anticipated interaction among programs is that one can launch another: the launcher launches the program that the user chooses, and then each program launches the launcher when the user chooses to quit. My intuition is that the spirit of the GPL would treat each page as a separate "executable file". Am I right?
When a page is switched in, the CPU cannot see code or data in other pages without writing a page number to the MMU's control port. One program launches another by writing the page number and then jumping to the program's entry point, which produces semantics analogous to exec()
in a POSIX system. I plan to structure the aggregate such that programs with incompatible licenses never share a page.
The GPL FAQ claims that the GPL allows distribution of on the same medium:
An “aggregate” consists of a number of separate programs, distributed together on the same CD-ROM or other media. The GPL permits you to create and distribute an aggregate, even when the licenses of the other software are non-free or GPL-incompatible.
This appears to allow inclusion of, say, both GIMP and non-free programs on the same CD.
However the GPL FAQ also states:
If the modules are included in the same executable file, they are definitely combined in one program.
Answers to Distributing an operating system DVD bundling proprietary and GNU-GPL software? imply that a DVD image is not an "executable file" in this sense, even if one can boot a virtual machine from it. But would a ROM cartridge containing independent programs in separate banks be an "executable file"? If so, where is the line drawn? Is it between a block memory (such as DVD or SD) and an XIP memory (such as parallel flash)? Is it use of a documented file-system-like data structure in order to allow executables to be extracted and replaced?
exec()
, but my concern is how GPL defines "the same executable file".