|
From: | Jacob Bachmeyer |
Subject: | Re: Emacs contributions, C and Lisp |
Date: | Sat, 17 Jan 2015 21:40:48 -0600 |
User-agent: | Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.8.1.22) Gecko/20090807 MultiZilla/1.8.3.4e SeaMonkey/1.1.17 Mnenhy/0.7.6.0 |
David Kastrup wrote:
Jacob Bachmeyer <address@hidden> writesDavid Kastrup wrote:Jacob Bachmeyer <address@hidden> writes:Richard Stallman wrote[[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] The situation with Emacs will be the same as it is with GCC now: plug-ins have to be GPL.This illuminates the central question at hand: if an Emacs plugin is GPL, and provides access to internals of GCC, which is also GPL, can nonfree software use that Emacs plugin?That's not the central question at hand. The central question is: if an Emacs plugin can provide access to internals of GCC, what keeps nonfree software from using the same mechanism as the Emacs plugin to get access to internals of GCC?What stops nonfree software from doing that is that the mechanism used to get access to internals of GCC is very low-level (using ptrace(2) to directly access GCC's memory would not be out of the question) and transfers GCC internal structures over the link, which are interpreted within the Emacs process. According to the GPL FAQ: "Using shared memory to communicate with complex data structures is pretty much equivalent to dynamic linking."(<URL:http://www.gnu.org/licenses/gpl-faq.html#NFUseGPLPlugins>) I expect that GCC's internal trees qualify as "complex data structures". There is certainly not a nice, readable, text AST dump involved at any point.So gdb has to be licensed identically with any program you debug usingit because it is accessing the respective program's memory?
No, because GDB is not, itself, communicating with the target using complex data structures. A program that uses GDB to inspect some GPL target and interprets complex data structures from that target might bring the GPL into the picture, but GDB itself is merely a conduit in this picture. The OS kernel that implements ptrace does not have to be licensed identically to the program being debugged, either.
At any rate, does not sound like an interface one could keep steady across different GCC versions. To make that the case, you need something describing the internals' meaning, akin to how debug information describes memory layout. Once you have that kind of "my raw memory means $x" description, this constitutes an interface. Possibly an awkward interface, but that's not legally significant.
That's the point--the interface between the underlying processes is not stable across GCC versions and the "description" of the internals' meaning comes in the form of a C DSO that Emacs can load to get Emacs Lisp bindings to GCC's own API for accessing these structures. The "description" is a program component that must be combined with any program that uses it. Reverse engineering one version of the interface would allow non-free software to use that version of GCC, yes, but doing that repeatedly as GCC changes, without it ever becoming a derived work, would quickly become more expensive than simply writing a new parser. Especially since the two halves of the link plugin are only required to talk to each other, and are built together, so they can change easily. The link protocol could even be made polymorphic in some way, so that every pair of binaries built would have a subtly different link protocol.
The price for interoperation is interoperation. And since it is rather more than less important for free as opposed to proprietary software that independent teams can create cooperating applications, I don't see that it makes sense for us not to pay that price. And the latest point to which we can delay this is when a concrete application is imminent. We can't guarantee that such an application will be successful if we allow it. But it will definitely fail if we don't.You are right, which is why I am seeking a workable solution that all can be happy with.It sounds to me like we are looking for a snakeoil bottle label text that will placate Richard and/or ourselves for some while so that we might carry on a bit. But I don't think we can terminally avoid dealing with the fact that we cannot achieve interoperation between separate free software applications without enabling interoperation with separate nonfree software that does not trigger copyright. And our limited and distributed resources and skills as free software developers mean that our success depends on interoperation within free software. We can't afford this process every time we want something to work together.
We are at a point where continued inaction will eventually make GNU irrelevant, the right action will put GNU far ahead of all the others for the foreseeable future, and the wrong action will... well, extending the metaphor about the defensive wall around our city that RMS has used, the wrong action could destroy our defensive wall entirely.
It is very important that we find and carry out the right action.
[Prev in Thread] | Current Thread | [Next in Thread] |