* doc/misc/erc.texi: No need to include gpl in this small manual.
[bpt/emacs.git] / doc / misc / gnus-coding.texi
CommitLineData
01c52d31
MB
1\input texinfo
2
3@setfilename gnus-coding
cd1181db 4@settitle Gnus Coding Style and Maintenance Guide
01c52d31
MB
5@syncodeindex fn cp
6@syncodeindex vr cp
7@syncodeindex pg cp
8
9@copying
acaf905b 10Copyright @copyright{} 2004-2005, 2007-2012 Free Software
5dc584b5 11Foundation, Inc.
01c52d31
MB
12
13@quotation
14Permission is granted to copy, distribute and/or modify this document
6a2c4aec 15under the terms of the GNU Free Documentation License, Version 1.3 or
01c52d31
MB
16any later version published by the Free Software Foundation; with no
17Invariant Sections, with the Front-Cover texts being ``A GNU
18Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
19license is included in the section entitled ``GNU Free Documentation
5471fa1e 20License'' in the Gnus manual.
01c52d31 21
6f093307
GM
22(a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
23modify this GNU manual. Buying copies from the FSF supports it in
24developing GNU and promoting software freedom.''
01c52d31
MB
25
26This document is part of a collection distributed under the GNU Free
27Documentation License. If you want to distribute this document
28separately from the collection, you can do so by adding a copy of the
29license to the document, as described in section 6 of the license.
30@end quotation
31@end copying
32
33
34@titlepage
bff3818b 35@title Gnus Coding Style and Maintenance Guide
01c52d31
MB
36
37@author by Reiner Steib <Reiner.Steib@@gmx.de>
38
39@insertcopying
40@end titlepage
41
bff3818b
KY
42@c Obviously this is only a very rudimentary draft. We put it in the
43@c repository anyway hoping that it might annoy someone enough to fix
44@c it. ;-) Fixing only a paragraph also is appreciated.
01c52d31 45
5dc584b5 46@ifnottex
01c52d31 47@node Top
cd1181db 48@top Gnus Coding Style and Maintenance Guide
01c52d31 49This manual describes @dots{}
5dc584b5 50
1df7defd 51@insertcopying
5dc584b5
KB
52@end ifnottex
53
01c52d31
MB
54@menu
55* Gnus Coding Style:: Gnus Coding Style
cd1181db 56* Gnus Maintenance Guide:: Gnus Maintenance Guide
01c52d31
MB
57@end menu
58
59@c @ref{Gnus Reference Guide, ,Gnus Reference Guide, gnus, The Gnus Newsreader}
60
61@node Gnus Coding Style
62@chapter Gnus Coding Style
63@section Dependencies
64
65The Gnus distribution contains a lot of libraries that have been written
66for Gnus and used intensively for Gnus. But many of those libraries are
1df7defd 67useful on their own. E.g., other Emacs Lisp packages might use the
01c52d31
MB
68@acronym{MIME} library @xref{Top, ,Top, emacs-mime, The Emacs MIME
69Manual}.
70
71@subsection General purpose libraries
72
73@table @file
74
75@item netrc.el
76@file{.netrc} parsing functionality.
77@c As of 2005-10-21...
78There are no Gnus dependencies in this file.
79
80@item format-spec.el
81Functions for formatting arbitrary formatting strings.
82@c As of 2005-10-21...
83There are no Gnus dependencies in this file.
84
85@item hex-util.el
86Functions to encode/decode hexadecimal string.
87@c As of 2007-08-25...
88There are no Gnus dependencies in these files.
89@end table
90
91@subsection Encryption and security
92
93@table @file
94@item encrypt.el
95File encryption routines
96@c As of 2005-10-25...
97There are no Gnus dependencies in this file.
98
99@item password.el
100Read passwords from user, possibly using a password cache.
101@c As of 2005-10-21...
102There are no Gnus dependencies in this file.
103
104@item tls.el
105TLS/SSL support via wrapper around GnuTLS
106@c As of 2005-10-21...
107There are no Gnus dependencies in this file.
108
109@item pgg*.el
110Glue for the various PGP implementations.
111@c As of 2005-10-21...
112There are no Gnus dependencies in these files.
113
114@item sha1.el
115SHA1 Secure Hash Algorithm.
116@c As of 2007-08-25...
117There are no Gnus dependencies in these files.
118@end table
119
120@subsection Networking
121
122@table @file
123@item dig.el
124Domain Name System dig interface.
125@c As of 2005-10-21...
126There are no serious Gnus dependencies in this file. Uses
127@code{gnus-run-mode-hooks} (a wrapper function).
128
129@item dns.el, dns-mode.el
130Domain Name Service lookups.
131@c As of 2005-10-21...
132There are no Gnus dependencies in these files.
133@end table
134
135@subsection Mail and News related RFCs
136
137@table @file
138@item pop3.el
139Post Office Protocol (RFC 1460) interface.
140@c As of 2005-10-21...
141There are no Gnus dependencies in this file.
142
143@item imap.el
144@acronym{IMAP} library.
145@c As of 2005-10-21...
146There are no Gnus dependencies in this file.
147
148@item ietf-drums.el
149Functions for parsing RFC822bis headers.
150@c As of 2005-10-21...
151There are no Gnus dependencies in this file.
152
153@item rfc1843.el
154HZ (rfc1843) decoding. HZ is a data format for exchanging files of
155arbitrarily mixed Chinese and @acronym{ASCII} characters.
156@c As of 2005-10-21...
157@code{rfc1843-gnus-setup} seem to be useful only for Gnus. Maybe this
158function should be relocated to remove dependencies on Gnus. Other
159minor dependencies: @code{gnus-newsgroup-name} could be eliminated by
160using an optional argument to @code{rfc1843-decode-article-body}.
161
162@item rfc2045.el
163Functions for decoding rfc2045 headers
164@c As of 2007-08-25...
165There are no Gnus dependencies in these files.
166
167@item rfc2047.el
168Functions for encoding and decoding rfc2047 messages
169@c As of 2007-08-25...
170There are no Gnus dependencies in these files.
171@c
172Only a couple of tests for gnusy symbols.
173
174@item rfc2104.el
175RFC2104 Hashed Message Authentication Codes
176@c As of 2007-08-25...
177There are no Gnus dependencies in these files.
178
179@item rfc2231.el
180Functions for decoding rfc2231 headers
181@c As of 2007-08-25...
182There are no Gnus dependencies in these files.
183
184@item flow-fill.el
185Interpret RFC2646 "flowed" text.
186@c As of 2005-10-27...
187There are no Gnus dependencies in this file.
188
189@item uudecode.el
190Elisp native uudecode.
191@c As of 2005-12-06...
192There are no Gnus dependencies in this file.
193@c ... but the custom group is gnus-extract.
194
195@item canlock.el
196Functions for Cancel-Lock feature
197@c Cf. draft-ietf-usefor-cancel-lock-01.txt
198@c Although this draft has expired, Canlock-Lock revived in 2007 when
1df7defd 199@c major news providers (e.g., news.individual.org) started to use it.
01c52d31
MB
200@c As of 2007-08-25...
201There are no Gnus dependencies in these files.
202
203@end table
204
205@subsection message
206
207All message composition from Gnus (both mail and news) takes place in
208Message mode buffers. Message mode is intended to be a replacement for
209Emacs mail mode. There should be no Gnus dependencies in
210@file{message.el}. Alas it is not anymore. Patches and suggestions to
211remove the dependencies are welcome.
212
213@c message.el requires nnheader which requires gnus-util.
214
215@subsection Emacs @acronym{MIME}
216
217The files @file{mml*.el} and @file{mm-*.el} provide @acronym{MIME}
218functionality for Emacs.
219
220@acronym{MML} (@acronym{MIME} Meta Language) is supposed to be
221independent from Gnus. Alas it is not anymore. Patches and suggestions
222to remove the dependencies are welcome.
223
224@subsection Gnus backends
225
226The files @file{nn*.el} provide functionality for accessing NNTP
227(@file{nntp.el}), IMAP (@file{nnimap.el}) and several other Mail back
228ends (probably @file{nnml.el}, @file{nnfolder.el} and
229@file{nnmaildir.el} are the most widely used mail back ends).
230
231@c mm-uu requires nnheader which requires gnus-util. message.el also
232@c requires nnheader.
233
234
235@section Compatibility
236
237No Gnus and Gnus 5.10.10 and up should work on:
238@itemize @bullet
239@item
240Emacs 21.1 and up.
241@item
242XEmacs 21.4 and up.
243@end itemize
244
245Gnus 5.10.8 and below should work on:
246@itemize @bullet
247@item
248Emacs 20.7 and up.
249@item
250XEmacs 21.1 and up.
251@end itemize
252
cd1181db
JB
253@node Gnus Maintenance Guide
254@chapter Gnus Maintenance Guide
01c52d31
MB
255
256@section Stable and development versions
257
bff3818b
KY
258The development of Gnus normally is done on the Git repository trunk
259as of April 19, 2010 (formerly it was done in CVS; the repository is
1df7defd 260at http://git.gnus.org), i.e., there are no separate branches to
bff3818b
KY
261develop and test new features. Most of the time, the trunk is
262developed quite actively with more or less daily changes. Only after
1df7defd 263a new major release, e.g., 5.10.1, there's usually a feature period of
bff3818b
KY
264several months. After the release of Gnus 5.10.6 the development of
265new features started again on the trunk while the 5.10 series is
266continued on the stable branch (v5-10) from which more stable releases
267will be done when needed (5.10.8, @dots{}). @ref{Gnus Development,
268,Gnus Development, gnus, The Gnus Newsreader}
01c52d31 269
1df7defd
PE
270Stable releases of Gnus finally become part of Emacs. E.g., Gnus 5.8
271became a part of Emacs 21 (relabeled to Gnus 5.9). The 5.10 series
01c52d31
MB
272became part of Emacs 22 as Gnus 5.11.
273
274@section Syncing
275
276@c Some MIDs related to this follow. Use http://thread.gmane.org/MID
277@c (and click on the subject) to get the thread on Gmane.
278
279@c Some quotes from Miles Bader follow...
280
281@c <v9eklyke6b.fsf@marauder.physik.uni-ulm.de>
282@c <buovfd71nkk.fsf@mctpc71.ucom.lsi.nec.co.jp>
283
284In the past, the inclusion of Gnus into Emacs was quite cumbersome. For
285each change made to Gnus in Emacs repository, it had to be checked that
286it was applied to the new Gnus version, too. Else, bug fixes done in
287Emacs repository might have been lost.
288
289With the inclusion of Gnus 5.10, Miles Bader has set up an Emacs-Gnus
290gateway to ensure the bug fixes from Emacs CVS are propagated to Gnus
7cad71ad
G
291CVS semi-automatically.
292
293After Emacs moved to bzr and Gnus moved to git, Katsumi Yamaoka has
294taken over the chore of keeping Emacs and Gnus in sync. In general,
295changes made to one repository will usually be replicated in the other
296within a few days.
297
298Basically the idea is that the gateway will cause all common files in
299Emacs and Gnus v5-13 to be identical except when there's a very good
300reason (e.g., the Gnus version string in Emacs says @samp{5.11}, but
301the v5-13 version string remains @samp{5.13.x}). Furthermore, all
302changes in these files in either Emacs or the v5-13 branch will be
303installed into the Gnus git trunk, again except where there's a good
304reason.
305
01c52d31
MB
306@c (typically so far the only exception has been that the changes
307@c already exist in the trunk in modified form).
308Because of this, when the next major version of Gnus will be included in
309Emacs, it should be very easy -- just plonk in the files from the Gnus
310trunk without worrying about lost changes from the Emacs tree.
311
312The effect of this is that as hacker, you should generally only have to
313make changes in one place:
314
315@itemize
316@item
317If it's a file which is thought of as being outside of Gnus (e.g., the
318new @file{encrypt.el}), you should probably make the change in the Emacs
319tree, and it will show up in the Gnus tree a few days later.
320
7cad71ad 321If you don't have Emacs bzr access (or it's inconvenient), you can
01c52d31 322change such a file in the v5-10 branch, and it should propagate to Emacs
7cad71ad 323bzr -- however, it will get some extra scrutiny (by Miles) to see if the
01c52d31
MB
324changes are possibly controversial and need discussion on the mailing
325list. Many changes are obvious bug-fixes however, so often there won't
326be any problem.
327
328@item
329If it's to a Gnus file, and it's important enough that it should be part
330of Emacs and the v5-10 branch, then you can make the change on the v5-10
7cad71ad 331branch, and it will go into Emacs bzr and the Gnus git trunk (a few days
01c52d31
MB
332later). The most prominent examples for such changes are bug-fixed
333including improvements on the documentation.
334
335If you know that there will be conflicts (perhaps because the affected
7cad71ad 336source code is different in v5-10 and the Gnus git trunk), then you can
01c52d31
MB
337install your change in both places, and when I try to sync them, there
338will be a conflict -- however, since in most such cases there would be a
339conflict @emph{anyway}, it's often easier for me to resolve it simply if
340I see two @samp{identical} changes, and can just choose the proper one,
341rather than having to actually fix the code.
342
343@item
344For general Gnus development changes, of course you just make the
bff3818b 345change on the Gnus Git trunk and it goes into Emacs a few years
01c52d31 346later... :-)
bff3818b 347
01c52d31
MB
348@end itemize
349
350Of course in any case, if you just can't wait for me to sync your
351change, you can commit it in more than one place and probably there will
352be no problem; usually the changes are textually identical anyway, so
353can be easily resolved automatically (sometimes I notice silly things in
354such multiple commits, like whitespace differences, and unify those ;-).
355
356
357@c I do Emacs->Gnus less often (than Gnus->Emacs) because it tends to
358@c require more manual work.
359
360@c By default I sync about once a week. I also try to follow any Gnus
361@c threads on the mailing lists and make sure any changes being discussed
362@c are kept more up-to-date (so say 1-2 days delay for "topical" changes).
363
364@c <buovfd71nkk.fsf@mctpc71.ucom.lsi.nec.co.jp>
365
366@c BTW, just to add even more verbose explanation about the syncing thing:
367
368@section Miscellanea
369
370@heading @file{GNUS-NEWS}
371
372Starting from No Gnus, the @file{GNUS-NEWS} is created from
373@file{texi/gnus-news.texi}. Don't edit @file{GNUS-NEWS}. Edit
374@file{texi/gnus-news.texi}, type @command{make GNUS-NEWS} in the
375@file{texi} directory and commit @file{GNUS-NEWS} and
376@file{texi/gnus-news.texi}.
377
378@heading Conventions for version information in defcustoms
379
380For new customizable variables introduced in Oort Gnus (including the
381v5-10 branch) use @code{:version "22.1" ;; Oort Gnus} (including the
1df7defd 382comment) or, e.g., @code{:version "22.2" ;; Gnus 5.10.10} if the feature
01c52d31
MB
383was added for Emacs 22.2 and Gnus 5.10.10.
384@c
8f7abae3 385If the variable is new in No Gnus use @code{:version "23.1" ;; No Gnus}.
01c52d31
MB
386
387The same applies for customizable variables when its default value was
388changed.
389
390@c Local Variables:
391@c mode: texinfo
392@c coding: iso-8859-1
393@c End: