The Perfect Linux Distro
[ back ] [ email ]
Gentoo is almost perfect but not quite. This page describes the changes necessary to make
Gentoo the perfect Linux distro. I doubt the Gentoo project would implement many of these
ideas so a fork would probably be needed. Please email me if you decide to fork Gentoo and
use my ideas. :)
Changes to this document are indicated with red numbers. Entries with 1's would be the first
set of changes, 2's the second set and so on. Current set of changes: 4 (15feb2004)
New Portage System:
- rewrite portage in C to get rid of the python dependancy and allow for smaller
installations. store most of the code in a library that is accessed with a small
console command or special user applications.
- the portage tree should only contain ebuild, changelog and MD5 files. it should NOT
contain files that are only needed when installing the package. these extra files
produce a bloated portage tree and waste space on user's systems. The portage tree, as
of 28sep2003, had 212576kB of package data and 53200kB of that shouldn't have been
downloaded until package installation. You can download my
find-portage-trash.sh script to confirm this.
- sub-components (plugins, themes and scripts) of a package should be stored in sub-trees
instead of the main portage tree. these sub-trees would only be downloaded after the
package has been installed. this would further reduce the size of the portage tree.
- a setting similar to USE flags for portage tree categories. i.e. user's that don't
play games could disable all of the games categories. this is another feature that would
reduce portage tree size by not downloading specific categories.
-
- USE flags and other settings used to build a package need to be stored so they can be
reused when upgrading the package. updating world or system should also list updates to
unstable packages.
- USE flags should only be accessible with a program that manages a USE flag database,
this would be the best way. or they could be read from make.conf each time portage is
accessed and checked for changes against a copy stored in a database before replacing
the database copy with the values in make.conf. both of these methods would allow portage
to know what USE flags have changed so it could recommend remerging of affected packages.
- prompt for and/or highlight new/removed USE flags when upgrading packages. i.e. package
foo 1.1 supports USE flags 'X' and 'gtk' and version 1.2 adds support for USE flag
'imlib'.
- get rid of .keep files. the ebuilds should have a command to install new directories
that survive until the package is removed. a special base-filesystem package would
install the FHS system directories.
- ebuilds need a command to specify config files that aren't installed by the package.
i.e. nano can use /etc/nanorc and ~/.nanorc files but doesn't install them.
- prompt the user for removal of config files when removing packages.
- store names of undeleted config files in a database. this list can be viewed by the user
and a scan for manually deleted files would be done when syncing portage.
- detect file collisions between packages and abort installation.
- check for package updates in all slots
- emerge-webrsync is not nice and brings the system to its knees (fix this).
- rsync and webrsync should be handled by a setting instead of different commands. the
separate commands can still exist to override the default.
- portage needs a way to flag packages that contain security holes. syncing would inform
the user of installed packages with such holes.
- emerge should default to pretend-mode and prompt user for real-mode after display
results. a -y flag would force real-mode and a -n flag would disable the prompt.
- language flags similar to USE flags would disable installation of unwanted language
files.
- option to disable installation of man, doc and info files. the community website for
the distro should have html copies of these and a search engine for easy access. a
special package could provide a wrapper for lynx and a smart bookmark or extension could
be used to add easy access for mozilla and firebird.
- better handling of upgraded config files, the current method is tedious.
- new layout for Changelog files to make grep'ing them easier. use long lines for each
change, similar to a log file entry. would require a program to make editing and reading
easier.
- multiple methods of syncing: rsync, http, ftp, scp, cvs, pserver, ...
- package-only USE flags, the global USE flags should not contain options that are only
used by one package. packages with private USE flags would prompt the user for each flag.
this would allow more customization of packages instead of just what the distro
developers chose for you. an ebuild could prompt for default or custom install.
a default install would use the settings selected by distro devs. the custom install
would prompt for each package option.
- 1 emerge gives a lot of aux_get() errors when run as a normal user (fix this).
- 1 portage should queue messages and display them when finished. messages are
often lost when installing a lot of packages and the scrollback buffer is not big enough. no
one wants to scroll through tens of thousands of lines of output looking for messages.
- 1 ebuilds need a command to easily add/remove users and groups instead of ugly
hacks used by distcc or making them part of the default passwd/groups files as is done with
qmail. the user/group would be registered in the same way installed files are and removed when
uninstalling the package. portage could even scan the system for files owned by the user/group
before removing it and store the names of those files in a database similar to the one used to
hold stale config files.
- 2 support binary ebuilds in the same package as the source (i.e. the
mozilla-firebird and mozilla-firebird-bin packages would be combined into mozilla-firebird).
binary USE rules (bin-all, bin-medium and bin-large) could always use binaries, when
available, or only for packages of certain sizes. binary ebuilds would specify their size as
small, medium or large. the binaries would only be used if the USE flags match those needed by
the binary version of the package. support multiple binaries of the same version with different
USE flags (i.e. a package could have binaries built with and without gnome support).
- 2 support cvs ebuilds that would also be included in the same package as
source and binaries.
- 3 support for multiple remote and/or local portage overlays. `emerge sync`
would sync with each overlay after updating the main tree.
- 4 an opt-in feedback program that sends a list of installed packages and USE
flags when syncing with repository. this would show maintainers what packages are being used so
they can focus more attention on them. users of this program can also register to be 'testers'
of new ebuilds and would receive an email containing changes to ebuilds before they become
available to all users. this would allow the testers to correct mistakes made by the maintainer
just by replying to the email. it would also reduce the number of bugs submitted, or not
submitted, to the bugzilla and improve the quality of ebuilds.
Additional distro features:
- a live-CD menu with installation scripts and rescue utilities.
(similar to glis but better)
- parallel service loading using a program to intercept messages from boot
scripts/services and insert them under the init message for the service they belong to.
(this is needed to prevent a jumble of unordered messages being spewed to the boot
screen)
- start X server and gdm as soon as possible in the boot process. display service init
messages with icons next to each. display login prompt as soon as its safe to do so. if
user logs in before services have completed then display an overlay window on the
desktop until complete.
(here is the original idea)
(2 OSNews article)
- console and gui control panel program
- plugin architecture so packages can install config modules.
- abstract interface API so the same plugin can be used in the gui and console
versions.
- this program could also be used on all other distros and packages could ship with
plugins so they wouldn't need to be separate packages.
- lots of plugins
- portage manager: access to all portage and gentoolkit features and portage
configuration including USE flags, language, man, doc and info settings.
will allow actions to be queued for batch processing.
- init script manager
- miscellaneous system settings: clock, keymap, etc...
- user/group manager
- kernel config and installer
- ebuild editor/viewer (similar to abeni)
- plugins for services: apache, mysql, X, etc...
- bugzilla interface with quick links to bugzillas for each installed package (if
they have their own bugzilla) and for the distro bugzilla. this would not be
an html interface, is this possible? could launch a browser if the package's
bugzilla doesn't have a non-html backdoor.
- a non-html interface for the community forums. html forums stink, are slow and
hard to navigate. :)
- irc plugin with quick links to distro channels and package servers/channels.
- patch XFree86 for PREFIX=/usr and get rid of /usr/X11R6.
- 1 all services should be patched to use non-root accounts, when possible.
Copyright © 1995-2005 Brand Huntsman
( best viewed with text-only and gecko browsers ) 