summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2010-08-26 06:33:40 -0700
committerKarl Berry <karl@freefriends.org>2010-08-26 06:33:40 -0700
commitfc9e09aefe118abf4d694fc509e32f2631fe55e8 (patch)
tree79e8dfdaa3ae315efe421c5fc7462a688ee146ed
parent0a051206787d83314ac69cf4c8857c0e880feaed (diff)
downloadgnulib-fc9e09aefe118abf4d694fc509e32f2631fe55e8.tar.gz
autoupdate
-rw-r--r--doc/make-stds.texi11
-rw-r--r--doc/standards.texi41
2 files changed, 46 insertions, 6 deletions
diff --git a/doc/make-stds.texi b/doc/make-stds.texi
index 7cc9537b82..6c83b5d58f 100644
--- a/doc/make-stds.texi
+++ b/doc/make-stds.texi
@@ -943,11 +943,12 @@ foo.dvi: foo.texi chap1.texi chap2.texi
@end smallexample
@noindent
-You must define the variable @code{TEXI2DVI} in the Makefile. It should
-run the program @code{texi2dvi}, which is part of the Texinfo
-distribution.@footnote{@code{texi2dvi} uses @TeX{} to do the real work
-of formatting. @TeX{} is not distributed with Texinfo.} Alternatively,
-write just the dependencies, and allow GNU @code{make} to provide the command.
+You must define the variable @code{TEXI2DVI} in the Makefile. It
+should run the program @code{texi2dvi}, which is part of the Texinfo
+distribution. (@code{texi2dvi} uses @TeX{} to do the real work of
+formatting. @TeX{} is not distributed with Texinfo.) Alternatively,
+write only the dependencies, and allow GNU @code{make} to provide the
+command.
Here's another example, this one for generating HTML from Texinfo:
diff --git a/doc/standards.texi b/doc/standards.texi
index 73885d6670..bd41a3afa7 100644
--- a/doc/standards.texi
+++ b/doc/standards.texi
@@ -3,7 +3,7 @@
@setfilename standards.info
@settitle GNU Coding Standards
@c This date is automagically updated when you save this file:
-@set lastupdate June 21, 2010
+@set lastupdate August 24, 2010
@c %**end of header
@dircategory GNU organization
@@ -543,6 +543,7 @@ command line interface, and how libraries should behave.
* User Interfaces:: Standards about interfaces generally.
* Graphical Interfaces:: Standards for graphical interfaces.
* Command-Line Interfaces:: Standards for command line interfaces.
+* Dynamic Plug-In Interfaces:: Standards for dynamic plug-in interfaces.
* Option Table:: Table of long options.
* OID Allocations:: Table of OID slots for GNU.
* Memory Usage:: When and how to care about memory needs.
@@ -1122,6 +1123,44 @@ General help using GNU software: <http://www.gnu.org/gethelp/>
It is ok to mention other appropriate mailing lists and web pages.
+@node Dynamic Plug-In Interfaces
+@section Standards for Dynamic Plug-in Interfaces
+@cindex plug-ins
+@cindex dynamic plug-ins
+
+Another aspect of keeping free programs free is encouraging
+development of free plug-ins, and discouraging development of
+proprietary plug-ins. Many GNU programs will not have anything like
+plug-ins at all, but those that do should follow these
+practices.
+
+First, the general plug-in architecture design should closely tie the
+plug-in to the original code, such that the plug-in and the base
+program are parts of one extended program. For GCC, for example,
+plug-ins receive and modify GCC's internal data structures, and so
+clearly form an extended program with the base GCC.
+
+@vindex plugin_is_GPL_compatible
+Second, you should require plug-in developers to affirm that their
+plug-ins are released under an appropriate license. This should be
+enforced with a simple programmatic check. For GCC, again for
+example, a plug-in must define the global symbol
+@code{plugin_is_GPL_compatible}, thus asserting that the plug-in is
+released under a GPL-compatible license (@pxref{Plugins,, Plugins,
+gccint, GCC Internals}).
+
+By adding this check to your program you are not creating a new legal
+requirement. The GPL itself requires plug-ins to be free software,
+licensed compatibly. As long as you have followed the first rule above
+to keep plug-ins closely tied to your original program, the GPL and AGPL
+already require those plug-ins to be released under a compatible
+license. The symbol definition in the plug-in---or whatever equivalent
+works best in your program---makes it harder for anyone who might
+distribute proprietary plug-ins to legally defend themselves. If a case
+about this got to court, we can point to that symbol as evidence that
+the plug-in developer understood that the license had this requirement.
+
+
@node Option Table
@section Table of Long Options
@cindex long option names