chiark / gitweb /
+ * Documentation improved somewhat, including new GPL-vs-LGPL file.
authorian <ian>
Sun, 17 Sep 2000 00:45:54 +0000 (00:45 +0000)
committerian <ian>
Sun, 17 Sep 2000 00:45:54 +0000 (00:45 +0000)
@@ -10,7 +10,7 @@
   * adnsresfilter has --debug option.
   * Improvements to adnslogres (incl. new -c option) from Tony Finch.
   * adnslogres has --help option.
-  * Documentation improved somewhat.
+  * Documentation improved somewhat, including new GPL-vs-LGPL file.
   * Do not install adnstest test utility.

   Regression test improvements:

1  2 
GPL-vs-LGPL
changelog

diff --cc GPL-vs-LGPL
index 0000000000000000000000000000000000000000,62672f62a769c153cc24c4c773fd70e461276aba..00c37b341c41ca007d376b2bed1475247794b36b
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,429 +1,122 @@@
 -NB that NO VERSIONS of this file from this branch have been released,
 -and I do not intend yet to publish this version.  If you get an old
 -version of this file from my CVS repository definitely do not intend
 -the licence exceptions in it to apply - these too were drafts, as you
 -should know if you know what retreiving old CVS versions means !
 -
 -  - Ian Jackson, 9th March 2004.
 -
 -DRAFT - DRAFT - DRAFT - DRAFT - DRAFT - DRAFT - DRAFT - DRAFT - DRAFT
 -
+               GPL vs LGPL, in the context of adns
+               -----------------------------------
 -Several people have asked me to release adns under the GNU Lesser
++Several people have asked me to release GNU adns under the GNU Lesser
+ General Public Licence (LGPL, formerly the Library GPL) instead of the
+ `stronger' GPL.  This file is intended to answer most of these
+ questions.  If you still have questions or comments, please mail me at
+ <adns-maint@chiark.greenend.org.uk>.
+ Typically there are two or three kinds of situation where people make
+ this request: the first is where someone is developing a proprietary
+ program and wishes to make use of adns but doesn't wish to make their
+ program free software.  The second case is where a free software
 -project is currently using an MIT-like licence and fear `GPL
 -infection'.  The third case, which often overlaps with the second, is
 -where another free software project currently using a GPL-incompatible
 -licence, wishes to use adns.
++project is currently using an MIT-like licence or the LGPL and fear
++`GPL infection'.  The third case, which often overlaps with the
++second, is where another free software project currently using a
++GPL-incompatible licence, wishes to use adns.
+ 1. Proprietary applications of adns
+ -----------------------------------
 -This section applies if you are developing a proprietary program, by
 -which I mean that you will not be distributing source code and not
 -allowing users to modify and share your software; in most cases you
 -will be doing this for (personal or corporate) financial gain.
++So, let me get this straight.  You're writing a proprietary
++program, by which I mean that you will not be distributing source code
++and not allowing users to modify and share your software; most likely
++you are doing this for your own (personal or corporate) financial
++gain.
 -In these cases I may be prepared to issue you a special `LGPL' for
 -adns (ie, allow you to use adns in your application according to the
 -terms of the LGPL).  I will of course expect a significant licensing
 -fee.
++However, you want to take advantage of adns, software which I have
++spent my time and effort on, and which I release as free software so
++that everyone can improve, share and use it.
 -If you are interested I would be happy to negotiate with you.  Please
 -contact me with your serious initial offer, or if alternatively we can
 -first discuss your detailed requirements.
++Don't you think that is a little hypocritical ?  I'm sorry, but I
++don't want you to just take my nice convenient software, without
++giving something back to the free software community or giving the
++same rights to your users as I do to you.
 -The fee for proprietary applications of adns without prior approval is
 -US$1,000,000 per annum (or part thereof), per proprietary product, per
 -100,000 installed systems (or part thereof), plus any administration,
 -collection and legal fees required to recover the licence fee.  Of
 -course, this does not apply to commercial Free software applications
 -whose use of adns is compatible with the GNU GPL v2.
++If you really aren't the nasty kind of person I've described here, for
++example if you have a good reason other than your own selfishness for
++wanting to restrict distribution of your program, then perhaps you
++should contact me to discuss it.
+ 2. GPL-avoiding projects (MIT licence, et al)
+ ---------------------------------------------
+ Some free software projects prefer to avoid the GPL and other licences
+ which force the software always to be free.  Instead they use
+ something like the MIT X licence, which allows proprietary versions of
 -their software.  I have to say that I don't understand why they do
 -this, and think they are misguided, but that doesn't mean that they
 -don't have a perfect right to.
++their software, or the in the case of some free libraries, the LGPL,
++which allows proprietary applications.  I have to say that I think
++these people are misguided, but that doesn't mean that they don't have
++a perfect right to do that.
+ Some of these people think that merely writing to an interface
+ provided by GPL'd software will cause their program to become GPL'd
+ too, even if they don't distribute the GPL'd software.  I don't think
 -this is the case.  I'm perfectly happy for non-GPL'd software to refer
 -to adns in its source code or executables (eg, dynamic linking).
 -However, if you distribute adns yourself then whether a program which
 -uses it needs also to be GPL'd depends on the interpretation of the
 -`work as a whole' and `mere aggregation' parts of the GPL.
 -
 -Whether you are distributing a `work as a whole' might depend on many
 -things, but they key one to me is what the appearance is to a user.
 -If the user knows that they are getting a collection of software
 -rather than a single product, then it's probably an aggregation which
 -works together.  So, you can distribute both your (i) non-GPLd program
 -source and/or binaries and (ii) adns source code or even binaries
 -(provided the adns source is available as per the GPL), eg from your
 -website, provided the user can tell that these are separate works and
 -can tell which parts are which.
 -
 -But, if you package your program and adns together so that the user is
 -no longer aware of adns as a separate work, then I think you are
 -distributing a `work as a whole', and the whole work including adns
 -and your software which depends on it must be GPL'd.  This is of
 -course not a problem if your non-GPL licence is GPL-compatible (see
 -the next section): it just means that _when the whole lot is shipped
 -together as one work_ it is covered by the GPL.  People who wish to
 -make proprietary works based on just your code can do so, provided
 -they (or you) arrange for something to fill the hole left by the lack
 -of adns.
++this is the case.  I'm perfectly happy for non-GPL'd but
++GPL-compatible software to refer to adns in its source code.  However,
++I think that exectuables (or compiled libraries) which contain or are
++dynamically linked against adns must be GPL'd; likewise executable
++programs (whether compiled or in an interpreted language) which
++require utilities from adns to function properly must be GPL'd.
++
++So, you can distribute your non-GPL'd program source which needs adns
++to compile (provided it's under a GPL-compatible licence), but people
++who wish to distribute binaries must do so under the terms of the GNU
++GPL.  This may make sense for some GPL-avoiding free software
++projects; people can still make proprietary programs from your code,
++provided that they make some provision to replace adns with something
++whose copyright allows proprietary versions.
++
++However, this doesn't make much sense for the authors of LGPL'd
++libraries.  All I can say to them is to ask which is more important:
++that their library be well-constructed and use all the best technology
++available as free software, or whether it is worth degrading quality
++of their library in order to allow proprietary programs to use it !
++
++To help the case of LGPL'd libraries for which adns is not a vital
++component - for example, a library which provides access to other
++libraries so that programs which use it need only use certain parts,
++I have released adns.h (just the public header file) under the LGPL as
++well as the GPL.  See the copyright notice in adns.h for details.
++Note that this will not help you if it adns is essential to the
++functioning of your library, because all programs using your library
++must link against both your library and adns and so must be GPL'd.
++
++
++For some information and views from the Free Software Foundation on
++free software licensing, visit:
++
++ Various licenses and comments about them
++  at http://www.fsf.org/philosophy/license-list.html
++
++ Why you shouldn't use the Library GPL for your next library
++  at http://www.fsf.org/philosophy/why-not-lgpl.html
+ 3. GPL-incompatible free software licences
+ ------------------------------------------
+ Regrettably, there are a number of free software licences (and
+ semi-free licences) in existence which are not compatible with the
+ GPL.  That is, they impose restrictions which are not present in the
 -GPL, and therefore distributing a whole work which contains such a
 -program and a GPL'd program is not possible: either the work would
 -have to be distributed under the GPL (violating the restrictions made
 -by the original author), or under the GPL-incompatible licence
++GPL, and therefore distributing a whole work which contains both such
++a program and a GPL'd program is not possible: either the combination
++would have to be distributed under the GPL (violating the restrictions
++made by the original author), or under the GPL-incompatible licence
+ (violating the GPL).
+ I may be prepared to make exceptions for such a licence.  Please
+ contact me at <adns-maint@chiark.greenend.org.uk> with the full text
 -of the GPL-incompatible licence.  However, I would prefer it if you
 -could use a GPL-compatible licence for your project instead.
 -
 -There are a couple of common extra restrictions, and I make some
 -specific extensions to my licence for adns below.
 -
 -
 -3.1. BSD advertising clause, endorsement restriction, etc.
 -
 -The most notable and common extra restriction found in free software
 -licences is the `obnoxious BSD advertising clause' (see Richard
 -Stallman's article on the subject, available from www.gnu.org) and the
 -endorsement restriction.
 -
 -The problem with the advertising clause isn't that the sentence
 -required, referring the the Regents of the UC Berkeley, is awkward.
 -The problem is that if everyone contributing to a large project gets
 -such a mention the number of sentences required becomes very large;
 -however, it is unfair for some people to get credit and others not to.
 -
 -I disapprove of these clause, but I recognise that it may be difficult
 -for some people to get them removed from particular programs.  The
 -other clauses are also arguable.
 -
 -
 -3.2. `Hosting service' restriction (eg, Affero GPL)
 -
 -The additional restriction in the AGPL v1 (section 2d) seems
 -reasonable to me, in the circumstances.
 -
 -
 -3.3. Licence extension
 -
 -So, I hereby make an extension to my licence for adns (`the Original
 -Work' in the text below).
 -
 -
 - LICENCE DEROGATION
 - ------------------
 -
 - (A) Introduction:
 -
 -  (i)    The GNU GPL version 2, section 2b, and the later parts of
 -       section 2, require that certain works be licenced to all
 -       third parties under the terms of the GPL.
 -
 -  (ii)         As special relaxations of this requirement, described in
 -       detail below, the terms of this onward licence to third
 -       parties need not be (though they may be) exactly the terms of
 -       the GPLv2.
 -
 - (B) Preconditions:
 -
 -  (i)    There is a work (the `Original Work') which is licensed under
 -         the GNU GPL v2.
 -
 -  (ii)   There is a work (the `GPL'd Work'), either the same work as
 -         the Original Work, or derived work of the Original Work,
 -         which is licensed uner the GNU GPL v2.
 -
 -  (iii)  All of the copyright holders of the GPL'd Work state that
 -         this Licence Derogation is to apply, and what the Original
 -       Work is.  (They may limit the Derogation to only some of the
 -         Allowable Extra Provisions.)
 -
 -  (iv)   The GPL'd Work is combined with another work (the Other
 -         Work) to make a `work as a whole', the Combined Work.
 -
 -  (x)    The Other Work is licenced free of charge to third parties;
 -       under the terms of a licence henceforth known as the Other
 -       Licence.
 -
 -  (xi)   The Other Licence is Free.
 -
 -  (v)    It would be an infringement of the copyright in the Other
 -         Work for you to distribute the Combined Work under the terms
 -       of the GNU GPL v2.
 -
 -  (vi)   There is a Resulting Licence which is the GNU GPL v2 amended
 -       by the addition of Extra Provisions and the relevant
 -       conditions from this Licence Derogation, where
 -
 -  (viii) the Extra Provisions are some or all of the Allowable Extra
 -         Provisions (see below), and
 -
 -  (x)    the Extra Provisions are provisions of the Other Licence.
 -
 -
 - (C) Permission:
 -
 -  (i)    Provided that the the conditions in this Licence Derogation
 -         are met, you may distribute the Combined Work under the terms
 -         of the Resulting Licence.
 -
 -  (ii)   When the Combined Work is distributed under the terms of the
 -         Resulting Licence, references to `this licence' in the text
 -         of the GPL v2 may be read as references to the Resulting
 -         Licence, or as references to the GPL v2, at your option.
 -
 - (D) Further Conditions:
 -
 -  (i)    All parts of the Combined Work which are (identical to, parts
 -       of, or derived from) the GPL'd Work can be easily separated
 -       out from the Whole Work's source code to form once more a
 -         Re-separated Work.
 -
 -  (ii)   The Re-separated Work is a version of the Original Work which
 -       is similar or superior in all respects (including
 -       completeness, functionality, quality etc.) to the Original
 -       Work.
 -
 -  (iii)  The Re-separated Work is licensed to third parties under
 -       terms identical to those under which the GPL'd Work is
 -       licenced to those same third parties.
 -
 -  (iv)   Copyright licences and notices which would appear to the
 -         reader to cover the Combined Work contain the following
 -       statement or an equivalent:
 -         Different parts of this software may be covered by
 -         different copying conditions.  See individual source code
 -         files or copyright statements for details.
 -
 -
 - (E) The Allowable Extra Provision Kinds:
 -
 -   (i)   In each of the following Kinds (`(1)' onwards), the nature of
 -         the Extra Provisions which are made Allowable, and the
 -         further conditions which must be satisfied (and which
 -         therefore form part of the Resulting Licence) are stated.
 -
 -   (ii)  All of the paragraphs (`(i)' onwards) stated in each Kind
 -         must be satisfied, for Extra Provisions to be Allowable.
 -
 -  (1) `Obnoxious advertising clause':
 -  
 -   (i)   The Extra Provisions are those of the form:
 -          All advertising materials mentioning features or use of
 -          this software must display the following acknowledgement:
 -            This product includes software developed by DEVELOPERS.
 -       and re-wordings with similar effect, where DEVELOPERS is a
 -       person or group associated with the development of the Other
 -       Work.
 -
 -   (ii)  All advertising materials mentioning features or use of the
 -       Combined Work must display a similar acknowledgement for
 -       every Identifiable Author.
 -
 -   (iii) All distributions of the Combined Work must contain a list of
 -       the Identifiable Authors.       
 -
 -  (2) `Endorsement restriction':
 -
 -   (i)   The Extra Provisions are ones which restrict the use of the 
 -         authors', copyright holders' and/or contributors' names for
 -         endorsement or promotion of products.
 -
 -   (ii)  The endorsement restriction(s) must benefit all of the
 -         natural persons and organisations with an interest in the
 -         Whole Work, unless those people wish otherwise.
 -
 -  (3) `Liability limitation':
 -
 -   (i)         The Extra Provisions are ones which claim to exclude or limit
 -       in any way the liability, for malfunctions, failures etc. of
 -       the Whole Work or parts thereof, of any contributors,
 -       distributors, copyright holders, authors, etc. of the
 -       software.  Provisions which seek to deny warranties, even
 -       implied warranties, or which otherwise seek to limit similar 
 -       exposure(s) to risk(s), count.
 -
 -   (ii)        The protections of the Extra Provisions must be extended to
 -       all of the authors and distributors of the Whole Work, unless
 -       those people wish otherwise.
 -
 -
 -  (4) `Pointless restatements':
 -
 -   (i)         The Extra Provisions are ones which require distributions of
 -       the Whole Work to contain notices in source and/or binary
 -       distributions, and/or in the documentation and/or other
 -       materials provided with the distributions.
 -
 -   (ii)        The required notices must be simple truths, or restatements
 -       of licence provisions which actually apply to the Combined
 -       Work.
 -
 -   (iii) (The author of this Licence Derogation believes that
 -       `pointless restatement requirements' are compatible with the
 -       GPLv2, since they seem to fall under the heading of an
 -       `appropriate copyright notice and disclaimer of warranty',
 -       which is already required by the GPLv2.  However, this
 -       relaxation is provided in case of doubt.)
 -
 -
 -  (5) `Service provision - source code to users' (eg AGPL):
 -
 -   (i)   The Extra Provisions apply only
 -        (a) when the Other Work or Combined Work is intended to
 -            interact with people (`Users') through a computer network,
 -            or
 -        (b) when the Other Work or Combined Work is executed on behalf
 -            of a third party (the `User'),
 -         (or when both (a) and (b) apply).
 -
 -   (ii)  There exists a Sensible Publication Mechanism such that the
 -         Extra Provisions are satisfied when:
 -        (a) the Combined Work is made available free of charge to the
 -            public, by that Sensible Publication Mechanism, and
 -        (b) the existence and details of the Sensible Publication
 -            Mechanism are made known in appropriate ways to each
 -            User.
 -
 -   (iii) A Sensible Publication Mechanism is a reasonable and
 -         convenient means for allowing members of the public
 -         (`Downloaders') to obtain the source code in machine-readable
 -         form.
 -
 -   (iv)  A Sensible Publication Mechanism is not more onerous to
 -         provide than a public-facing World Wide Web server.
 -
 -
 - (F) Additional definitions:
 -
 -  (i)    A Free software licence is one which is approved both
 -        (a) as a Free Software licence by the Free Software
 -          Foundation, and
 -        (b) as an Open Source Licence by the Open Source Initiative.
 -
 -  (ii)   A Combining Participant includes any person:
 -        (a) who makes a modification to the Other Work, which is
 -            now included in the Combined Work, with a view to the
 -            creation of any work which might be a Combined Work
 -            according to this Licence Derogation; or
 -        (b) who obtains the Other Work and GPL'd work separately and
 -            distributes the Combined Work.
 -
 -  (iii)  An Identifiable Author is
 -        (a) a natural person
 -        (b) who contributed to the Combined Work (including without
 -            limitation as a work for hire)
 -        (c) whose identity or proper form of acknowledgement it
 -          reasonably practical to determine by inspection of the
 -          Authorship Documentation,
 -        (d) and who has not stated publicly that they do not wish such
 -          acknowledgements to be displayed.
 -
 -  (iv)   The Authorship Documentation includes all copyright notices,
 -         authorship notices, credits files, change logs,
 -         acknowledgements, and similar documentation, in the source
 -         code for the Original Work, the GPL'd Work, the Other Work
 -       and the Combined Work.
 -
 -  (v)    The Authorship Documentation also includes any communications
 -         received by a Combining Participant regarding authorship of
 -         any part of the Combined Work.
 -
 -
 -
 -
 -
 -   (iv)  A Sensible Publication Mechanism does not require any
 -         Downloader to provide any identification or authorisation
 -         other than that inherently required by the underlying
 -         technical mechanisms.
 -
 -   (v)   A Sensible Publication Mechanism is free of charge.
 -
 -   (vi)  A Sensible Publication Mechanism does not make any efforts to
 -         trace, track, cross-reference, or otherwise gain information
 -         about Downloaders, other than the minimum data required for
 -         direct technical fault-finding; any data collected shall be
 -         used only for direct technical fault-finding.
 -
 -   (vii) Where a Sensible Publication Mechanism involves
 -         implementation of a technical communications protocol, the
 -         Mechanism must permit the use by Downloaders of the widest
 -         feasible range of standards-compliant software.
 -
 -   (vii) For example, for download via the public World Wide Web to
 -         satisfy this paragraph, the HTTP server must permit downloads
 -         from any IP address, and it may not have any access controls,
 -         cookies, reverse DNS requirements, registration forms, adult
 -         checks, authorisation codes, email confirmations, URL
 -         session-ids, browser restrictions, JavaScript, Java, Flash,
 -         and must use the most conservative possible HTML, and the
 -         webserver logs must contain the least possible information
 -         and be expired quickly.
 -
 -DRAFT
 -
 -, or to pay anyone any
 -         money.
 -
 -   
 -
 -which there is a
 -         Sensible Mechanism  can be 
 -
 -(to the Other Work publicly and freely available.
++of the GPL-incompatible licence.  However, I would usually prefer it
++if you could use a GPL-compatible licence for your project instead.
 -          (a) (from `AGPL version 1')
 -             If the Program as you received it is intended to
 -             interact with users through a computer network and if,
 -             in the version you received, any user interacting with
 -             the Program was given the opportunity to request
 -             transmission to that user of the Program's complete
 -             source code, you must not remove that facility from
 -             your modified version of the Program or work based on
 -             the Program, and must offer an equivalent opportunity
 -             for all users interacting with your Program through a
 -             computer network to request immediate transmission by
 -             HTTP of the complete source code of your modified
 -             version or other derivative work.
++-- Ian Jackson 17.9.2000
 -DRAFT --- Ian Jackson 10.5.1999
+ Local variables:
+ mode: text
+ End: 
diff --cc changelog
index 524232d8156bda2d75ba8fcb89d058962684c872,1b7d991831d59d5232ba3729f5b69b4e3e2dcb5d..c982726db48ab0da6424e9b377cd34534bc8a0b3
+++ b/changelog
 -adns (0.2) experimental; urgency=low
 +adns (0.10) unstable; urgency=low
 +
 +  Bugfixes:
 +  * Fix incorrect `compressed datagram contains loop' error.
 +  * Actually compile shared libraries by default !
 +  * Fix adnsresfilter usage message to include correct default timeout.
 +
 +  General improvements:
 +  * adnshost, adnslogres, adnsresfilter have options for config override. 
 +  * adnsresfilter has --debug option.
 +  * Improvements to adnslogres (incl. new -c option) from Tony Finch.
 +  * adnslogres has --help option.
-   * Documentation improved somewhat.
++  * Documentation improved somewhat, including new GPL-vs-LGPL file.
 +  * Do not install adnstest test utility.
 +
 +  Regression test improvements:
 +  * Tests now include adnshost, adnslogres and adnsresfilter.
 +  * Test cancellation both before and after query completion.
 +
 +  Portability fixes and cleanups:
 +  * adnstest: setvbuf(stdout,...) before we do first output.
 +  * Cope with compilers that don't do `inline'.
 +  * Add and fix various missing system #includes.
 +  * Find install-sh properly when we need to use it, and chmod it +x.
 +  * Do not use variadic macro, use stdarg instead (adnslogres.c).
 +  * Regression tests work even if some syscalls are already macros.
 +  * #include "config.h" before "adns.h".
 +  * Cast a sizeof(...) in src/event.c to unsigned long before printing.
 +  * Add pre-generated versions of m4-generated files in regress/.
 +  * Kill bogus warning, adh-main.c: `arg2' might be used uninitialized ...
 +  * Add extra {...} near adnslogres.c:167 to kill spurious warning.
 +  * Use `printf' instead of `echo -n'.
 +  * Add list of tested platforms in INSTALL file.
 +
 + --
 +
 +adns (0.9) unstable; urgency=high
 +
 +  Bug fixes:
 +  * Don't make _processany always kill the TCP connection with the message
 +    `TCP connection failed: poll/select: exceptional condition detected'.
 +  * Call MEM_ROUND in __transfer_interim (avoids assert fail
 +    `qu->interim_allocd>=0' on some platforms eg 64 bit).
 +  * adnsresfilter doesn't resolve textual prefixes of addresses (eg,
 +    10.0.0.1 out of 10.0.0.123) if input happens to block at that point.
 +  * Do not spin if TCP connection blocks for writing (and add test case).
 +  * Fail queries if TCP dies repeatedly, rather than retrying many times.
 +  * Do not abort in a couple of places if TCP unexpectedly broken.
 +  * Do not free something twice if query fails and is then cancelled.
 +
 +  Portability/compilation fixes:
 +  * Move `extern "C" {' to after #include <...>'s.
 +  * Pass LDFLAGS from configure on to ld via settings.make.in.
 +  * make clean deletes *.so and *.so.* files.
 +  * New --disable-dynamic configure option for non-ELF systems.
 +  * Use AC_PROG_INSTALL (=> perhaps install-sh), to avoid bad `install'.
 +
 +  Minor improvements:
 +  * Do not print warning if sendto() gives EAGAIN.
 +  * adnsresfilter default timeout changed to 1000ms.
 +  * m1test script can invoke `hrecord' differently.
 +  * regress/output-<case>.report file contains more useful info.
 +  * TODO list and other docs updated slightly.
 +  * Referrals with RD+RA set, or RCODE=Refused, don't generate warnings,
 +    just debug messages.  BIND does this kind of thing all the time.
 +
 + -- Ian Jackson <ian@davenant.greenend.org.uk>  Wed,  9 Aug 2000 16:59:28 +0100
 +
 +adns (0.8) BETA; urgency=medium
 +
 +  Bugfixes:
 +  * Race near adns_beforeselect which could cause infinite timeout fixed
 +    (it's now less agressive, and will more often return a zero timeout.)
 +  * Fixed infrequent race causing assertion failure in adns__tcp_broken
 +    `ads->tcpstate == server_connecting || ads->tcpstate == server_ok'.
 +  * Spurious `server failure on unidentifiable query' warning suppressed.
 +  * If we get a referral, don't also always complain falsely about RD==0.
 +  * adnslogres: cast chars to unsigned char before using ctype.h macros.
 +  * In _beforeselect, global failure now means zero timeout, and in
 +    tcp_events, really never try to do anything with the TCP connection if
 +    act is zero.  This might possibly cause an infinite delay (ie, lockup)
 +    if things go badly wrong *and* a really unlikely race happens.
 +  * Test suite `lines of syscall left' value is correct; !0 is failure.
  
    Portability fixes:
 +  * install-sh (from autoconf 2.12 Debian r13) included.
 +  * adnslogres: do not call equivalent of printf("%.*s",0,(char*)0).
 +
 +  Documentation improvements:
 +  * Security/performance note added, about local nameservers and DNSSEC.
 +  * Documented that adns_rr_info _rr_hostaddr ( ) for address list
 +    means permanent failure, and ? means temporary failure.
 +  * Typo (*now for now in _beforeselect description) in adns.h fixed.
 +  * Copyright notices updated.
 +  
 +  Changes to produce more defensive code:
 +  * In adns_wait, assert that the timeout is not infinite.
 +  * Make qu->id start out as -2 when initially allocated.
 +
 + -- Ian Jackson <ian@davenant.greenend.org.uk>  Sun,  7 May 2000 23:37:13 +0100
 +
 +adns (0.7) BETA; urgency=medium
 +
 +  * New adns_submit_reverse_any for eg RBL lookups, and corresponding
 +    option to adnshost.
 +  * README updated (from www home page).
 +
 +  * In answers, quote all except alphanums and - _ / + (and document).
 +  * Don't reject specials in cnames even without adns_qf_quotefail_cname.
 +  * Better checking of long domain names and labels in queries.
 +  * answer->owner may be null on error.  Documented, and adnshost copes.
 +  * Better reporting of unexpected or weird replies from nameserver.
 +  * Add test case for recursion (infinite loop) domain compression.
 +
 + -- Ian Jackson <ian@davenant.greenend.org.uk>  Thu,  2 Mar 2000 01:55:53 +0000
 +
 +adns (0.6) BETA; urgency=high
 +
 +  Core library bugfixes:
 +  * Avoid infinite timeouts, causing lockup, when they should be zero !
 +  * TCP handling revamped (avoids undefined behaviour due to reentrancy).
 +  * Do not fail assertion if _qf_owner, _qf_search, domain ends in `.'.
 +  * Many memory leaks fixed.
 +
 +  Cool new utility:
 +  * adnsresfilter is like `cat' but converts addresses to names without
 +    delaying the output.  Pipe `netstat -n', `tcpdump -ln', etc. into it.
 +
 +  Test and client program bug and portability fixes:
 +  * Dynamic library building works properly.
 +  * adnshost prints somewhat better messages about some wrong usages.
 +  * Include <stdlib.h> and <sys/types.h> in adnshost.h.
 +  * adnslogres: parsing and error checking improved (Tony Finch).
 +  * Regression tests can cope with zero-length reads.
 +  * Regression tests check for memory leaks.
 +  * adnstest copes with empty query type list.
 +  * adnstest uninitialised memory bug fixed.
 +
 +  General improvements
 +  * Better control of adnshost output and error messages (new -F options).
 +  * New adns_if_logpid option (functionality suggested by Tony Finch).
 +  * New fanftest test program from Tony Finch (ignored by `make install').
 +  * Reads /etc/resolv-adns.conf if it exists.
 +  * Declare flags parameters as enums again, not ints.
 +
 + -- Ian Jackson <ian@davenant.greenend.org.uk>  Wed, 24 Nov 1999 17:13:03 +0000
 +
 +adns (0.5) unstable; urgency=high
 +
 +  New features:
 +  * adnslogres, ~100x faster replacement for Apache logresolve;
 +    Thanks to Tony Finch for the program and the performance figure.
 +  * Internal consistency checking with assert if right options set.
 +  * adns_wait_poll function like adns_wait but uses poll, not select.
 +  * adns_reverse_submit function for easy in-addr queries.
 +  * adns_errtypeabbrev funcion for getting eg "permfail" from _s_nodata.
 +  * adnshost utility for scripts and the like (rather alpha).
 +
 +  Incompatible changes:
 +  * RRs with mailboxes never rejected due to strange chars if _raw.
 +  * Lack of a mailbox produces `.' not `<>'.
 +  * Better usage messages (and no default query domain) for adnstest.
 +  * Return EAGAIN from _check instead of EWOULDBLOCK.
 +  * adns_rr_info on _r_mx etc. shows status type abbrev and status number.
 +  
 +  Bugfixes:
 +  * Do not invoke __autosys indirectly from __procdgram (result: coredump
 +    usually in memmove, unless adns_if_noautosys was used).
 +  * Do not scramble innards when a query on the output queue is cancelled.
 +  * Do not close tcp socket twice.
 +  * Mailboxes containing spaces in their names are quoted.
 +  * Give ESRCH, not EAGAIN, if _check called with no queries outstanding.
 +  * adns_rr_hostaddr naddrs is -1 on temporary failure (as documented).
 +  * Reject TXT RRs with no strings.
 +  * Correct error messages for qname CNAME foo, foo CNAME bar.
 +  * adns_processany actually does something.
 +  * Fixed typos in adns.h.
 +
 +  General improvements:
 +  * Promise not to change fds in adns_beforepoll (if now is specified).
 +  * Improved textual error string for _s_prohibitedcname.
 +  * New comment in adns_processany and return 0 (not r which is 0).
 +  * Documentation of resolv.conf directives and options, and of environment
 +    variables understood, in adns.h
 +  * Regression test scripts set EF_DISABLE_BANNER (for Electric Fence).
 +
 +  Portability and build improvements:
 +  * Give install the '-c' flag (otherwise some delete the original !).
 +  * Do not remove top-level Makefile on `make clean'.
 +  * Don't complain so much about poll(2) tests if not available.
 +  * Do not give -u 0 -g 0 options to install.
 +  * Remove trailing , from some enums in adns.h.
 +  * Dynamically linked clients now made with -l, so as to avoid rpath.
 +  * Do not use $^ in make rules (should help with non-GNU make).
 +  * Declare flags parameters as ints not enums because C++ is crap.
 +
 + -- Ian Jackson <ian@davenant.greenend.org.uk>  Wed, 13 Oct 1999 02:24:35 +0100
 +
 +adns (0.4) unstable; urgency=high
 +
 +  General important bugfixes:
 +  * make _qf_owner work if _qf_search not specified, and test it (oops!)
 +  * ads->configerrno now initialised (in setup.c).
 +  * timercmp(,,<=) doesn't work - use !timercmp(,,>).
 +  * Changed memory semantics of internal queries to fix bugs.
 +  * Restarting a TCP-using query (eg due to CNAME) doesn't abort.
 +  
 +  Fixes for handling of broken kinds of reply:
 +  * Only accept a reply from the subset of servers we sent the query.
 +  * Ignore CNAME(s) in answer after RR(s) (and test).
 +
 +  Other bugfixes and improvements:
 +  * adns_s_systemfail is in table of errors (for eg adns_strerror).
 +  * Do not ship config.cache, Makefile, etc.
 +  * Improvements to install instructions, TODO, etc.
 +  * Regression tests compile on systems without poll(2).
 +  * Do not install adnstest_s.
 +  * _submit returns ENOSYS, not adns_s_unknownquery; documented, tested.
 +  * <adns.h> includes <sys/types.h>, <sys/time.h>, <unistd.h>.
 +
 + -- Ian Jackson <ian@davenant.greenend.org.uk>  Thu, 5 Aug 1999 01:17:38 +0100
 +
 +adns (0.3) unstable; urgency=low
 +
 +  Incompatible changes:
 +  * Low adns_status values (below adns_s_max_tempfail) renumbered to make
 +    room for future locally-induced and locally-detected errors.
 +  * Event loop functions for use by select(2) renamed and tidied up.
 +  
 +  Features / improvements:
 +  * New adns_errabbrev() for getting status abbreviation strings.
 +  * regress/checkall prints summary list of failed tests, if any.
 +  * Event loop functions for poll(2), and some raw variants.
 +  * adnstest has ability to use poll(2), and user can set initflags.
 +  * checkall prints passed list as well as failed list, if any failed.
 +  * You can iterate over outstanding queries (but only once at a time).
 +  
 +  Bugfixes:
 +  * Non-RFC822 mailbox `domain' formatting now works, and clarified.
 +  * Rejection of bad characters in domains (without quoteok) works.
 +  * Clean up parents from adns->childw (otherwise would abort/segfault).
 +  * In adnstest, allocate enough space for, and terminate, query types.
 +  * In adnstest, don't print errno values as adns_status values.
 + 
 +  * Added TODO file.
 +  * Made adnstest.c test context pointers.
 +
 + -- Ian Jackson <ian@davenant.greenend.org.uk>  Thu, 15 Jul 1999 00:23:12 +0100
 +
 +adns (0.2) experimental; urgency=low
 +
 +  Portability fixes for compilation on various platforms:
    * Include <sys/socket.h> and <netinet/in.h> in files with <arpa/inet.h>.
    * Don't use GCC union assignment feature (.rrs=0 => .rrs.untyped=0).
    * Explictly cast things to [const] struct sockaddr* in syscall args.