emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Emacs contributions, C and Lisp


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> writes
David 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 using
it 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.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]