3 ms·
The Linux Kernel does not have a public API/ABI apart from the userspace syscall interface.
by jnky 11y ago
The Linux Kernel does not have a public API/ABI apart from the userspace syscall interface.
- amscanne 11y agoIt does. It exports many symbols for drivers (proprietary or otherwise) to use internally. Some symbols are exported GPL_ONLY, which means that only GPL drivers may call those symbols.
- jnky 11y ago> It exports many symbols for drivers (proprietary or otherwise) to use internally. I fail to see how those symbols being exported makes the relevant functionality public vs. internal to the kernel [1] > Some symbols are exported GPL_ONLY, which means that only GPL drivers may call those symbols. I don't think that is accurate. Drivers are necessarily derivative works of the kernel and have to be licensed under the GPL anyway. In practice closed source driver modules seem to be tolerated, even if they are not strictly compliant with the kernel's license.[2] The purpose behind the GPL_ONLY symbols is that a driver has to declare itself compliant with the license to use the symbols. If a proprietary driver would declare itself GPL compliant to gain access to GPL_only symbols, its author would be in even muddier waters than before. [1] https://www.kernel.org/doc/Documentation/stable_api_nonsense.txt https://www.kernel.org/doc/Documentation/stable_api_nonsense... [2] http://archive.linuxgizmos.com/are-non-gpl-loadable-linux-drivers-really-unot-u-a-problem-a/ http://archive.linuxgizmos.com/are-non-gpl-loadable-linux-dr...
- amscanne 11y ago> I fail to see how those symbols being exported makes the relevant functionality public vs. internal to the kernel [1] It's not stable, but it's an API. I can write and distribute a proprietary module that uses those symbols. I can't do that with symbols that aren't exported. > I don't think that is accurate. Drivers are necessarily derivative works of the kernel and have to be licensed under the GPL anyway. In practice closed source driver modules seem to be tolerated, even if they are not strictly compliant with the kernel's license.[2] The purpose behind the GPL_ONLY symbols is that a driver has to declare itself compliant with the license to use the symbols. If a proprietary driver would declare itself GPL compliant to gain access to GPL_only symbols, its author would be in even muddier waters than before. Now you're just being pedantic. Obviously when I said "GPL drivers" I mean those which explicitly include a MODULE_LICENSE("GPL") directive. What else would I mean? I'm not engaging in legal speculation.
- monocasa 11y ago> Drivers are necessarily derivative works of the kernel and have to be licensed under the GPL anyway. It can be a grey area. Quoting Linus himself > But one gray area in particular is something like a driver that was originally written for another operating system (ie clearly not a derived work of Linux in origin). http://yarchive.net/comp/linux/gpl_modules.html http://yarchive.net/comp/linux/gpl_modules.html
- Aissen 11y agoActually, some kernel developers believe that all exported symbols are contaminating, not just EXPORT_SYMBOL_GPL, see for example: http://thread.gmane.org/gmane.linux.kernel/1390226/focus=1391147 http://thread.gmane.org/gmane.linux.kernel/1390226/focus=139... The test used by the industry for derivative works usually requires a full implementation of the same code with another OS than Linux (e.g the nvidia drivers which shares 95% of the codebase between Linux and Windows). Some ported-over-from-an-RTOS drivers fall into this as well, but there's rarely enough value in them that they shouldn't be opensourced. In the end there are so many nice features hidden behind EXPORT_SYMBOL_GPL that it's rarely worth it to go the proprietary route.
- amscanne 11y agoWhile I'm sure that's an opinion held by some, it seems unreasonable when you have both EXPORT_SYMBOL and EXPORT_SYMBOL_GPL. If there is no distinction, then why does one exist? I think there's a good argument to be made regarding the intent of the application of the license across the API.