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

Re: Branden's contrib manifesto (was: Hey! Why does everybody love flaming so much? [was: `pure'])



On Sat, May 08, 1999 at 02:16:43PM -0500, Manoj Srivastava wrote:
>         I think we have descended to a level of nit picking that is at
>  odds with reaching a common ground.

Then let me summarise my arugment.

Currently, packages are put into contrib under a policy that is
essentially:

     * Free software goes into main, unless, in order to get that software
       to work, or to compile, you need to install other software from
       outside main, in which case it goes into contrib.

So packages that are free but need software that's not packaged for
Debian, that's non-free, or that's distributed in non-us rather than
main currently get lumped into contrib.

That's a perfectly consistent viewpoint, and it makes people who
install from CD happy: they don't get complaints about software that's
not installable.  But it has a couple of flaws. One, notably, is that
it confuses issues of freedom with issues of American export policy.

An alternative, is a policy more like:

    * Free software goes into main, unless, in order to get that software
      to work, or to compile, you need to install non-free software.

That's also a fairly consistent viewpoint, and it seems to be one we'd
like to move toward considering the current moves to split non-US into
main/contrib/non-free, and to allow packages in main to depend on packages
in main or non-US/main.

I don't have any issues with any of this. I think either of these is a
completely reasonable way of breaking up the distribution.

However, I also don't think it's entirely unreasonable to take a step
back, and see what we're trying to achieve, and if there's a better way
to do so.

So.

The social contract states, under the heading "Debian will remain 100%
free software":

] We will support our users who develop and run non-free software
] on Debian, but we will never make the system depend on an item of 
] non-free software.

That is, we would like to create a system that doesn't depend on an item
on non-free software. I think this is a reasonable way of explaining
what we're trying to achieve with contrib.

So what does it mean to `depend' on non-free software?

I'm going to go with the definition from the packaging manual:

]    The `Depends' field should be used if the depended-on package is
]    required for the depending package to provide a significant
]    amount of functionality.

I'll further assume that everyone on this list is able to determine what
a `significant amount of functionality' means, and what `required for'
means. I'm at something of a lost to understand package maintainers
claiming that they can't tell what a dependency is. :-/

For the purposes of this discussion, I guess I'd like to break the
general term `dependency' down into four areas:

     * debian-depends: The `Depends/Pre-Depends/Recommends' relationships.
       That is, packages that have a stated dependency on some other package
       and won't even install (easily) without that other package.

     * local-depends: Dependencies on software that isn't packaged for
       Debian. The StarOffice installers, eg, depend on a number of
       tarballs being present in /tmp to be of any use. These dependencies
       are not stated officially, but are nevertheless recognised by
       policy in determining whether software should go in contrib.

     * firmware-depends: Dependencies on firmware, including BIOS chips,
       CPU designs, printer hardware, ethernet cards, etc; whether upgradable
       by software or not.

     * remote-depends: Dependencies on software running on a remote machine,
       and accessed via Debian's standard networking capabilities.

Some examples:

   * xfig.deb debian-depends on libjpegg6a

     What happens when you try to use xfig without libjpegg6a?
         $ sudo dpkg --force-depends --purge libjpegg6a
         [...]
         $ xfig
         /usr/X11R6/bin/xfig: error in loading shared libraries: 
         libjpeg.so.6a: cannot open shared object file: No such file or
         directory

   * The rvplayer.deb installer local-depends on the RealVideo tarball

     What happens when you try to use rvplayer without the RV tarball?

         Error: cannot find rvplayer archive in /tmp/rv50_linux20.tar.gz
         Visit http://www.real.com/products/player/50player/downloadrealpl...
         and download the "Linux - ELF" version of Real Video Player.

         Correct the above problems, and when you are done, enter 'Y'
         below. Or, enter 'N' to abort the installation.

    * chos.deb firmware-depends on i386

      I don't, unfortunately, have a non-i386 I can conveniently test
      this on. Nor do I have a BIOS-less machine I can try LILO on. *sigh*

    * bitchx.deb remote-depends on an IRC server

      What happens when you don't have an IRC server?

          -:- Connecting to port 6667 of server irc.phrozen.org [refnum 10]
          -:- Unable to connect to port 6667 of server irc.phrozen.org: 
                    Connection refused
          -:- Connecting to port 6667 of server irc.openface.ca [refnum 11]
          -:- Unable to connect to port 6667 of server irc.openface.ca:
                    Connection refused

That is, these programs are not self-sufficient without their
dependencies.

At the moment we have the following situation:

    free-software debian-depending on non-free software goes into
    contrib.  That's fine, it doesn't cause anyone any problems.

    free-software local-depending on any other software goes into contrib.
    That's fine, for non-free `other' software, and for free other
    software it's a reasonable way of encouraging people to package
    it too.

    free-software firmware-depending on non-free `soft'-ware goes into
    main, because there just isn't an alternative. There aren't any
    free computers going into production yet.

    free-software remote-depending on non-free software goes into main.

What we want to change is to move any free-software that `remote-depends'
(or `remote-recommends', but not `remote-suggests') on non-free software
from main to contrib.


Some further comments.

Yes, when looked at from the `dependency' angle, this results in a `double
standard'. We're still ignoring some non-free software, and allowing
software that depends on it to go into main. Perhaps one day we'll have
bios-upgrade.deb's that are maintained by the community, and perhaps
one day Open Hardware will take off, and we'll have freely upgradable CPUs.
But until then, we're just going to brush that issue under the carpet.

You will, however, note the word "still" in the above. We're *already*
ignoring both this dependency, and also the issue of remote-dependencies.
This doesn't introduce a double standard, it *weakens* an existing one.


This changes the reasons we might put software in contrib. It's no
longer reasonable to say things like `Oh, no, that's in contrib. Sure,
it's DFSG-free, but it's just not free enough.' That was never
particularly meaningful to begin with -- DFSG-free is what "free enough"
*means*. Instead, contrib is `free software that requires non-free
software for its functionality.'

And yes, it may make people feel a bit uncomfortable when we tell them
that, yeah, sure, it's free and all, but that's not good enough for
Debian. But we're not trying to make people comfortable, we're trying to
produce a free operating system, that doesn't depend on non-free software.


As an aside, one presumes that a Debian GNU/Solaris or a Debian GNU/Amiga
would be a second class citizen in the Debian family, since every piece
of software in it (more or less) depends on a piece of non-free software
-- the Solaris kernel, or Kickstart and/or Workbench at least -- that
we can't even distribute.


What's the point of all this? Manoj claims it's to "coerce" people into
writing free software. Branden and I have strongly objected to that
term, but the issue does deserve discussion. Hopefully the reader can
work out for him/herself whether this is a good or a bad thing without
needing to be lead by the nose with loaded terms.

Anyway. What are we hoping to achieve here? We're hoping to educate people
out there that some of the software they choose to use, like TiK or like
True Type fonts, are still inextricably bound to non-free software. We're
naturally hoping to avoid inconveniencing anyone, unless they make an
educated choice to *be* inconvenienced.

So, by moving software to contrib, do we achieve these goals? Yes:
people can see at a glance which software depends on non-free stuff,
and, if they're so inclined choose not to use it for that reason. If, on
the other hand, they still wish to use it, it's only negligbly harder.
Contrib CDs are usually available along with the official CDs from
vendors, and mirrors generally mirror both main and contrib. So at
worst, it's an extra $5, or an extra line in your sources.list.

On the other hand, it muddies up what's in contrib. If you don't mind
installing TiK, but you'd be loathe to install xforms, then your sources.list
will need to include main and contrib, but not non-free. But if it does,
you'll get bothered by messages about how xisp can't be installed because
libforms doesn't have an installation candidate.

This isn't good, and could do with solving. On the other hand, it could
use solving in the general case too: presuming software in contrib depending
on non-US/main software is moved into main, then we again have programs
that can't be installed because their dependencies simply can't be met.


And all of that was well and good, but what's so wrong with remote-depends
anyway? The problem is exactly the same as ordinary dependencies: you're
reliant on someone else's proprietry code to use your software. If the
server gets shutdown, or stops being maintained, your free software
becomes -- at least until someone writes a replacement -- completely
worthless. If the owner of the server starts charging money for
connection, you either pay up, or hope someone writes a replacement. If
the owner of the server decides they don't like you, you're out of
luck again.

That's why non-free servers are still `bad', in spite of free clients
being available. And as such, I don't think non-free servers and protocols
deserve the endorsement they'd obtain by allowing clients to be part
of the Debian system.


Another issue that then arises is `what's good enough for a free server?'.
For example, while lesstif exists as a replacement for motif, it's not
perfect. Similarly, the program `netcat' can serve as a replacement
server for *any* client, can't? It'll accept connections, then not doing
anything, and that's at least *something*. What it won't do is enable you
to get at a significant amount of the functionality of most programs. For
example, with irc, bitchx will simply sit there waiting for something
to happen. There's certainly some ambiguity here, but no more or less
than determining when lesstif is enough of a motif replacement for its
dependents to go into main.

OTOH, with Perl and netcat, you can write a fairly simple script to do
the other half of the conversation. At what point does "configuring a
server" become "writing a server"? Are you just configuring gcc to be
a motif replacement? Or are you writing a motif replacement? Are you
configuring netcat to act as an IRC replacement, or are you writing
an IRC replacement? Are you configuring ircd to act as an openprojects
replacement, or are you writing an openprojects replacement?

There's an issue here, but again, I don't think it's one where there's a
problem in practice. It's clear that when you're involving gcc that goes
beyond just configuring a package, and a rule like, when you're writing
the protocol steps yourself, that goes beyond just configuring a server,
isn't much harder to deal with.


Finally I've been ignoring the whole `pure' issue. I don't think that's
at all a reasonable thing to do. I believe remote-depends are exactly
as much a dependency as local-depends, and as such, I think they should
have the same consequences: removal from the official Debian GNU/Linux
distribution. I think the social contract supports that line of reasoning.

But I don't see what the point is saying "This software's free, it doesn't
depend on non-free stuff in any important manner -- but here, look at this!
This is not only free, but it depends on *less* non-free stuff than that
other stuff". Or at least that's how it seems to me. :-/


But anyway. I said when I joined this discussion that it doesn't really
matter to me. I use non-free software and contrib software and I don't
have a particular issue with that. I certainly don't have a particular
issue with using free clients that happen to talk to non-free servers. I
do think this is an appropriate distinction for Debian to draw, though,
for the reasons outlined above, but it just plain isn't going to affect
me personally in any way. So I think I'm going to more or less bow out of
the discussion. If someone else wants to take up the torch and continue
the flamewar for another week -- or hell, even write a proposal for Manoj
to formally object to -- feel very free.

Cheers,
aj

-- 
Anthony Towns <aj@humbug.org.au> <http://azure.humbug.org.au/~aj/>
I don't speak for anyone save myself. PGP encrypted mail preferred.

``Smart, sexy, single. Pick any two (you can't have all three).''
        -- RFC 1925, paraphrased: a guide to networking in the '90s

Attachment: pgph8ByobH34B.pgp
Description: PGP signature


Reply to: