Hi all. Below is a submission for standard that I'm working on. I'd
appreciate thoughts, comments, and ideas.
Recently, I have been working over strategies for Linux on the desktop. In
particular, I've been comparing usability of system administration tasks
to Windows 2K/XP and Mac OS X, the main contenders on the desktop. System
administration tasks are done by almost everybody who owns a computer.
It's not only things like applying security patch's, but includes mundane
things like cleaning out old files, changing thedial-up number for your ISP, and installing and removing software.
The last point is a bit of contention under Linux. Sure, apt-get, urmpi,
and the like make it easy to get and install the latest open source
software from your favourite vendor, but they don't cover 'other'software. Third party, and closed source software is somewhat more difficult.
Third party applications are often found on CDs, and quite often the
vendor may not be around any more. While there are many arguments for and
against closed source software, the fact is that it exists, and it needs
to be installed, maintained, and eventually, removed. A common example of
popular third party applications are games.
Currently, every vendor has their own method of handling the
installation and (optionally) removal of software. This is often handled
by scripts, Make files, or an GUI application stored somewhere on the file
system, perhaps on the original CD. This is confusing for the end user,
and to be brutally honest, it's a mess.
While it is possible to statically compile libraries, it's not exactly
reasonable to have binary files with every single piece of information
required to run a program. Things like icons, sound, data, andconfiguration files all often need to be accessible to the user and other
programs.
One possibility, that I put forward here, is for a simple install and
uninstall system, based around symlinks, and a common applications
directory.
The application, to all outward appearances in most common file
browsers, would appear as a file, but it's really a directory. Let us
assume the application is called 'Foo'. Foo consists of binary files,
supporting libraries, icons, configuration files usually found in /etc/,
and so on. We can express most of these in terms of where they normally
fit in the unix file system. A few, mainly icons, and programsshortcuts, vary from environment to environment.
The 'Applications' folder is accessible from the users Control panel as a
special directory, allowing write access with sudo and the rootpassword. The folder itself would most likely sit in somewhere like
/usr/local/Applications/. Thus, our application 'Foo', would be in
/usr/local/Applications/Foo/. It's file structure would look something
like this:
/usr/local/Applications/Foo/
/usr/local/Applications/Foo/icon.svg
/usr/local/Applications/Foo/description.txt
/usr/local/Applications/Foo/main -> ./tree/usr/local/bin/foo
/usr/local/Applications/Foo/tree/usr/bin/foo
/usr/local/Applications/Foo/tree/usr/lib/foo/libfoo.so
/usr/local/Applications/Foo/install/etc/foo/foo.conf
/usr/local/Applications/Foo/home/.foo/
To install, symlinks from are made from /usr/bin/foo and /usr/lib/foo/ and
/usr/local/Applications/Foo/tree/usr/lib/foo/ to/usr/local/Applications/Foo/tree/usr/bin/foo, and to
/usr/local/Applications/Foo/tree/usr/lib/foo/. A copy of
/usr/local/Applications/Foo/install/etc/foo/foo.conf is made to /etc/, so
that changes made to the configuration do not affect the original files of
the program.
At the most basic level, Foo/ needs to be copied from it's original source
to /usr/local/Applications/ and a script run to copy files in Foo/install/
and make symlinks of the files in Foo/tree/. However, this allows for much
greater usability. The file Foo/icon.svg can replace the standard folder
icon, and Foo/description.txt can contain multiple language descriptions
of the program, to be read by any program used to handle the installation
and removal of applications. On moreuser-friendly systems, double clicking on the icon for the program on a CD
would prompt the user if they wish to install the program.
Attempting to delete the 'program' from the Applications directory would
prompt the user if they wish to 'uninstall'. The computer would then
remove the symlinks and any configuration files. It also allows the
program to ask if the user wishes to remove the system configuration
files, originally copied from the the Foo/install/ directory, and user
configuration files, originally copied from the Foo/home/ directory.
Other benefits of this method come to mind. Source installed packages, for
example, Mplayer, instead of being installed directly into the file
system, is instead copied into /usr/local/Applications/mplayer/, and
installed in the above manner. Mplayer can then be copied easily to other
systems, and removed easily.
It is also fairly easy to install such applications in systems that do not
support it 'natively'. Although a simple shell script is all that is
required to 'install' the programs, files can easily be symlinked and
copied by hand if need be.
I will emphasise again that this system is not meant to replace things
link apt-get and rpm, but sit alongside them, and provide a common simple
platform independent way of installing third party software.