[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Linux Core: a more detailed draft
Suggested requirements for Linux Core. Like the last one to be posted
to this list, this is still incomplete, and still (of course!) up for
discussion.
This draft temporarily lives at
http://frunobulax.mit.edu/~seul/Core-1.txt
Hopefully, somebody else will come up with a better version soon. :)
Notes:
** This is only a draft of suggestions. If you disagree with
any of it, please say so.
** I'm trying to go _overboard_ here. If I thought it
_might_ be a good idea to include something, I've listed it.
** I've omitted quite a few things I believe to be necessary for
a decent Linux system, but which do not IMO raise
cross-distribution compatibility issues. Personally, I'd never
use a system without Emacs, but Emacs-incompatibility is not
(to the best of my knowledge) an issue for distributions to
worry about. Similarly, we don't need to specify user-end
mailhandlers, web clients, and so forth in the Networking Layer.
==========
Organization:
* The core is divided into a number of layers. All but
the "Base" layer are optional. Installation or layers should,
however, be all-or-nothing by default: for example, either _no_
networking tools should be installed, or the complete networking
layer should be installed.
Versions:
* This document does not attempt to suggest which versions of
the components below any given core will provide. This will
be left to individual versions of the Linux Core.
* The Linux Core will be versioned in the following format:
MAJOR.MINOR.PATCHLEVEL.
-Major versions will correspond to large-scale revisions in the
core philosophy (if any), large-scale breaks in compatibility (such
a.out->ELF, glibc1->glibc2, etc.), and to large-scale changes in
Linux itself (a new kernel major version, etc.).
-Minor versions will correspond to changes which may break existing
non-core system components. These should be released infrequently,
unless required for security reasons.
-Patch versions will correspond to changes made in core components
for the purposes of security, stability, or functionality, which
do _not_ break compatibility with any other system components.
* Individual Core specs will specify _exact_ versions for given
components.
Principles:
* In order to be included in the core, a component should either be
itself necessary for the proper operation of the system, or required
by "many" other packages, where "many" is left deliberately
undefined.
* No 'unstable' components should be included in the core. This includes
not only buggy programs, but also development kernel releases.
* Only in exceptional cases should the core include:
- Components which are "officially" unstable (yet in general use).
- Components which have been released for less than some prespecified
amount of time.
* It's possible that some elements should not be required for every
installation, but the Core ought to specify a particular version when
they are used. Perhaps, OTOH, these elements should _always_ be
installed, and only activated as needed.
----- Suggestions for Core layers
Below are my suggestions for what should be included in each layer.
Note that many utilities are listed by package, not by utility name.
This is largely because I don't want to list the entire contents of
/bin, when most of them come from 3 or 4 key packages.
Key:
[?] : Of debatable necessity.
[O] :
----- BASE LAYER: Required for all installations. Let's keep this
one as minimal as we can. -----
- Compliance with some version of the FHS. (Latest is 2.0). This
specifies a number of required binaries; all these are included
are included in the spec, and marked with [?].
- System
* Some specific Linux kernel version, with (at least) a specific set of
modules.
* Module & kerneld support utilities.
* LILO
* [?] Loadlin
* Mount
* E2fsprogs
* SysVinit
* Ld.so (Includes libdl.)
* Some minimal /dev entries
* Syslogd
* [?] Cron
* [?] At
* [?] Linuxthreads
* [?] GPM
* [?] Makedev (This _is_ required, but not AFAIK standardized. Correct
me if I'm wrong.)
* [?] Quota
- Libraries
* Libc (Includes libm.)
* Termcap
* Libdb
* Libgdbm
* NCurses
* [?] Slang
* [?] Newt
- Standard user binaries
* GNU fileutils
* GNU Sh-utils
* GNU Textutils
* GNU Findutils
* Util-Linux (Also includes some system components. Some parts of
util-linux conflict IIRC with the above 3 packages. We should
specify which versions we want.)
* Tar
* Gzip
* Compress
* Procps
* Groff
* Man
* File
* Less
- Shells
* Bash (or sh?)
* Tcsh (or csh?)
* [?] (Some fully posix-compliant sh)
- Scripting/processing
* Gawk
* Sed
* Grep
* [?] Perl (IMO perl is sufficiently ubiquitous that a system
without it is likely to be unable to run many programs.)
* [?] Tcl (I seldom use Tcl myself without Tk, but some people do.)
* [?] Make (Some say that make is useful to the non-developer.
I agree that it is, but am not sure about requiring it.)
- Editors
* [?] Some Vi clone. (I'm not sure we should require any particular
version here.)
- Package management
* I'm not sure what to include here. Perhaps we should say that no
distribution can be Core complient unless it has a package manager
which meets _at least_ certain requirements. I don't know about
this one.
* Every Core-compliant distribution must provide an upgrade
mechanism sufficiently powerful to upgrade to a later version
of the Core.
----- DEVELOPMENT LAYER: Needed in order to successfully develop and
compile typical source files. We don't want to include every
language under the sun (CLisp, Fortran, CLU, &tc.) in the
Development Layer of the core -- just enough to ensure compatibility
in typical cases. -----
- Support files
* Static libraries and .h files for all of the libraries in the Base
Layer.
* [?] Source for the linux kernel in the base layer. (Or just the
headers?)
- Compilers
* Gcc (including g++)
* [?] Bison
* [?] Flex
- Utilities
* GNU Binutils
* [?] GDB
----- NETWORKING LAYER: Enough to run a system on the network. The core
does _not_ specify versions of servers, except when compatibility
issues arise. (What system depends on having a specific version
of httpd?) Similarly, we don't specify clients, except when other
programs will expect them to exist. -----
- User tools
* Net-Tools
* NetKit
* [?] Bind-Utils
- Daemons
* PPPd
* Inetd
* [?] Some MTA (Sendmail, smail, &tc.)
----- X WINDOW LAYER: ("And it's 'X Window', not 'X Windows'!")
This one is problematical. We shouldn't IMO require any particular
server or library set, yet we _should_ require certain tools and
libraries _as a minimum_. For example, it's no biggie to require
X11R6.3.
But do we want to specify mandatory toolkits? Personally, I'd
consider any X system crippled if it couldn't run Tcl/Tk. But do we
go on and require other toolkits? I'd say "no", even though I much
prefer Gtk to Tk. The purpose of the Core is to specify specific
versions of "required" components, and I really don't think that other
non-standard toolkits have the same prevelance as Tk. (Let me
know if I'm wrong.)
Also, how many 'commonly used' extra libs do we want? LibXpm seems
necessary, but what about (for example) libjpeg, libtiff, libz,
ImageMagick, and all the other occasionally-needed libraries?
==================================================
Okay, so that's what I came up with. What do people think?
--
\\ Nick Mathewson // "Of *course* we'll send the penguin through the
// <nickm@mit.edu> \\ flaming hoop tonight!" - FZ