[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