285 lines
15 KiB
HTML
285 lines
15 KiB
HTML
|
<!--startcut ==========================================================-->
|
||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
|
||
|
<HTML><HEAD>
|
||
|
<title>Linux and the Future LG #46</title>
|
||
|
</HEAD>
|
||
|
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#0000AF"
|
||
|
ALINK="#FF0000">
|
||
|
<!--endcut ============================================================-->
|
||
|
|
||
|
<H4>
|
||
|
"Linux Gazette...<I>making Linux just a little more fun!</I>"
|
||
|
</H4>
|
||
|
|
||
|
<P> <HR> <P>
|
||
|
<!--===================================================================-->
|
||
|
|
||
|
<center>
|
||
|
<H1><font color="maroon">Linux and the Future</font></H1>
|
||
|
<H4>By <a href="mailto:h_al_mohssen@hotmail.com">Husain Al-Mohssen</a></H4>
|
||
|
</center>
|
||
|
<P> <HR> <P>
|
||
|
|
||
|
The spread of the Internet at the start of this decade had a
|
||
|
profound impact on the development of free software. Suddenly, because
|
||
|
of free software a large number of people could start collaborating on
|
||
|
developing large software projects without being in large universities or
|
||
|
corporations. Though mailing-lists and FTP sites, a large number of people
|
||
|
could start using their free/fun/project's time to build programs
|
||
|
that would be too much for any single person alone. Fundamentally,
|
||
|
the Internet is a new production technology that has made
|
||
|
software production cheaper just as the sewing machine made clothes
|
||
|
production cheaper.
|
||
|
<p>
|
||
|
Today, free software has grown to become a complete system starting
|
||
|
with a very high-quality kernel (Linux and others) to some of the best
|
||
|
user applications. In fact, not only do we have free programs to do
|
||
|
the job of most commercial applications; in many cases, we have more
|
||
|
than one free project with very similar functions (i.e., different
|
||
|
philosophies or scopes). This free, complete and high-quality system
|
||
|
was bound to attract the attention of companies. Not only because Linux
|
||
|
and other free software were growing into a large market but also
|
||
|
it was in direct competition (and in many cases beating) their own
|
||
|
products. Companies need to sell programs for this platform and need to
|
||
|
figure out a way of competing with this new way of making software.
|
||
|
<p>
|
||
|
<h3>Possible problems facing Linux in the Future</h3>
|
||
|
<p>
|
||
|
The huge growth in the use of Linux and free software has triggered a
|
||
|
great increase in the number of commercial and non-commercial developers;
|
||
|
this is leading to an ever-increasing rate of growth and innovation. In
|
||
|
the midst of all of this great evolution, I see a number
|
||
|
of factors that may end up hurting Linux and other free software in the
|
||
|
long run. Here are some of them:
|
||
|
<p>
|
||
|
<H4>1. Intolerance</H4>
|
||
|
<p>
|
||
|
There seems to be a certain amount of intolerance towards software
|
||
|
produced by people with different beliefs regarding free software
|
||
|
in general and towards commercial software in particular. This, in my
|
||
|
judgment, is quite dangerous since commercial software is one of the
|
||
|
best sources of innovation in software, simply because commercial people
|
||
|
can dedicate themselves to it. Software can't always be given
|
||
|
freely since companies have to make money to cover costs. Also,
|
||
|
sometimes it would be disastrous for companies to give their programs
|
||
|
for free, e.g., drivers for hardware that cost millions in R&D could give
|
||
|
many hardware secrets to competitors. The biggest
|
||
|
problem with commercial software is not that it is commercial, but that
|
||
|
monopolies sometimes arise stopping competition and reducing the
|
||
|
quality of the software. If free and commercial software can find a way to
|
||
|
co-exist, it would mean we could all enjoy the best of both worlds.
|
||
|
A similar type of intolerance exists toward programs that are written
|
||
|
with different licenses; this is too bad, since the best feature of free
|
||
|
software is the freedom to choose.
|
||
|
<p>
|
||
|
<H4>2. Stagnation</H4>
|
||
|
<p>
|
||
|
Linux (and UNIX in general) was extremely well-designed for the
|
||
|
needs of the people of its time. With the change of
|
||
|
requirements of users and applications, change
|
||
|
is continuously required. Linux has done better than other UNIX systems
|
||
|
in dealing with this change, e.g., the FHS (File Hierarchy Standard) is much more in touch with
|
||
|
user requirements than many commercial UNIX systems. There
|
||
|
is still room for improvement, in my opinion. The important thing to
|
||
|
remember is that change has to be emphasized and standards should be
|
||
|
there to facilitate change by providing a common working ground, not
|
||
|
by hindering it.
|
||
|
<p>
|
||
|
<H4>3. False Oversimplification</H4>
|
||
|
<p>
|
||
|
With all the pushing for making Linux easier to use,
|
||
|
a number of programs try to imitate other operating systems by having the
|
||
|
computer do the computer managing with the user just watching without
|
||
|
knowing what is actually happening. This lack of understanding
|
||
|
or distinction between the different parts of the system prevents the
|
||
|
user from using the different parts in new and creative ways. In fact,
|
||
|
this flexibility is one of the best features of Linux. This doesn't
|
||
|
mean that graphical interfaces are not required--quite to the contrary,
|
||
|
I think we are in desperate need of properly designed ones--it just
|
||
|
means that it should be thought out. It should reflect the way a typical
|
||
|
Linux system is put together and at the same time have room to grow as
|
||
|
different components are added in the future.
|
||
|
<p>
|
||
|
<h3>Factors for Ensuring the Continued Success of Linux</h3>
|
||
|
<p>
|
||
|
There are a number of strategies I feel free software should
|
||
|
adopt. Most of these are extensions of things people have already
|
||
|
been doing.
|
||
|
<p>
|
||
|
<H4>1. Standardization</H4>
|
||
|
<p>
|
||
|
This is one of the most vital requirements for development on
|
||
|
the Internet since it allows many people to collaborate on programs that
|
||
|
will run on common platforms. Free software always had a long heritage
|
||
|
of being very standard compliant. For Example, Linux has been
|
||
|
POSIX compliant from the start. There are also free implementations of NFS
|
||
|
(for networking), X (for windowing), OpenGL (for 3D graphics) and many others. In light of this heritage, it is truly disturbing to read things
|
||
|
like ``requires Red Hat Linux'' (even though I think it
|
||
|
is one of the best distributions). Open standards for both software and
|
||
|
hardware components should be published and maintained. I would suggest
|
||
|
that a standard (``Linux 2000'' would be a nice name) be
|
||
|
established that defines everything a hardware or software developer
|
||
|
would need to guarantee that his program or the driver would work on any
|
||
|
system that is complaint. This standard should not only include things
|
||
|
like FHS but also standard packages would be needed. It is very
|
||
|
important to realize that distributors and manufacturers will push for open
|
||
|
standards, if they are not published and maintained by the Free Software
|
||
|
community, and in that case, the control will not be in the hands of the
|
||
|
community.
|
||
|
<p>
|
||
|
<H4>2. Componentization</H4>
|
||
|
<p>
|
||
|
The idea is to build the system from separate components with clear
|
||
|
boundaries between them such that you can always plug components into
|
||
|
the system and not have to rely on a single source for anything. This
|
||
|
can be achieved by insisting on standards for how different components
|
||
|
integrate into the system and by separating application-specific
|
||
|
configuration files from application-neutral data, so that competing
|
||
|
applications or services can use the same information. The ultimate goal
|
||
|
of componentization should be to make free software the backbone of
|
||
|
everything. When thinking about free software, Richard Stallman suggests
|
||
|
thinking ``free speech, not free beer'' as an extension to that
|
||
|
I would suggest thinking of free software as ``free air'',
|
||
|
it is everywhere and everyone needs it.
|
||
|
<p>
|
||
|
<h3>An Example</h3>
|
||
|
<p>
|
||
|
As an example of how the ideas I suggested in the last section can
|
||
|
be applied, I decided to put together my own desktop Linux system using
|
||
|
them. I tried to make my system as standard compliant as possible, but
|
||
|
also to include all the ``luxuries'' of a complete desktop
|
||
|
system (this included man pages, X, KDE, a number of languages and many other things).
|
||
|
<p>
|
||
|
<H4>1. How did I do it?</H4>
|
||
|
<p>
|
||
|
My system uses one large (500MB+) file as its root file system and
|
||
|
another file (64MB) for swap. It boots off a small temporary RAM disk
|
||
|
and mounts the root file system and the swap through the loopback device
|
||
|
(/dev/loop0 ). One advantage of this setup is that it
|
||
|
is very easy to install on different computers since it's just a
|
||
|
matter of copying one directory to the new machine.
|
||
|
<p>
|
||
|
The root disk was made bootable by copying some files from
|
||
|
the /bin, /sbin and the /lib,
|
||
|
as well as creating and tweaking some files and directories in
|
||
|
/etc. Now that the system was booting, I needed to
|
||
|
compile the other components of the system. As a first step I needed a compiler, so I copied <b>gcc</b> 2.7.2.3 and compiled <b>egcs</b> 1.1.1
|
||
|
and installed it. The various other components of the system were then
|
||
|
compiled and installed starting from the basic (X, common libraries
|
||
|
and utilities) and then progressing to applications (KDE, xv, GNUStep,
|
||
|
Kaffe, etc.).
|
||
|
<p>
|
||
|
<H4>2. System Description</H4>
|
||
|
<p>
|
||
|
By examining the file-system structure, you can clearly see the way I tried
|
||
|
to implement some of the ideas in the previous paragraphs. Although
|
||
|
it is almost fully FHS 2.0 compliant, a number of features
|
||
|
make it distinctively different. To begin with, files in the
|
||
|
/usr hierarchy are severely restricted. Only 3 main file types are in /usr, The first are the binaries
|
||
|
expected to be in any modern UNIX (e.g., <b>head</b>, <b>telnet</b>, <b>ftp,</b> etc. The second group of files are programs or libraries required by many other programs or needing special root access
|
||
|
to install properly. This category contains various libraries
|
||
|
in /usr/lib and /usr/local/lib and X in /usr/X11R6. Finally, architecture-independent, shared data files are stored in /usr/share
|
||
|
as is recommended by the FHS. The emphasis in my system is that the
|
||
|
share directory should be a place where programs can share data between
|
||
|
different applications on the same system; hence, most files are symbolic links
|
||
|
to the data in the program's home directory.
|
||
|
<p>
|
||
|
Another major feature of the system is the modification of the structure
|
||
|
of /etc. Instead of the current practice of having
|
||
|
all the files in one flat directory, a number of trees have been
|
||
|
added. This is done to decrease the clutter and make the structure
|
||
|
of the system more clear. For Example, /etc/man.conf
|
||
|
is now stored in /etc/utils/man/man.conf while
|
||
|
/etc/rc.d is now /etc/sys/init/rc.d with symbolic links are maintained to the old location of files for the sake of
|
||
|
compatibility. As is required by the FHS, configuration files for programs
|
||
|
in /opt can be stored in /etc/opt, but in addition, subdirectories to it exist for the same reasons given
|
||
|
above. In my judgment, these small modifications to the /etc hierarchy
|
||
|
can easily fulfill the requirement of a registry system for Linux with
|
||
|
only a small modification to the way things are done.
|
||
|
<p>
|
||
|
In my system, most applications and programs live in the /opt directory or a subdirectory of
|
||
|
it. For example, Kaffee (the free Java VM) is installed in /opt/languages/kaffe while KDE is installed in /opt/windows/kde. The thinking behind this
|
||
|
is that all a package's files are stored in the directory
|
||
|
designated for it in the /opt hierarchy and a number of well-defined points of contact are established between a package and
|
||
|
the rest of the system including /opt/bin and /opt/bin,
|
||
|
subdirectories of /usr/share, as well as a number of other directories.
|
||
|
<p>
|
||
|
Although this looks similar to the FHS the goal is
|
||
|
totally different. In my system, a package has to have a symbolic link
|
||
|
put in /opt/bin to all of it's public binaries for it to work
|
||
|
from the command line. Likewise, proper symbolic links have to be set
|
||
|
in /usr/share/man for the man pages of the package
|
||
|
to work properly. This same principle applies to a number of other
|
||
|
directories including /etc/opt for configuration files
|
||
|
and /etc/sys/init/rc.d/init.d for packages that use the services of <b>initd</b>.
|
||
|
<p>
|
||
|
<img src="gx/al-mohssen.gif">
|
||
|
<P>
|
||
|
The figure schematically shows both the way the packages interface with the system as well as a specific examples. The
|
||
|
reason for going to all of this trouble is to clarify, simplify and limit
|
||
|
the points of contact between any packages, both programs and services
|
||
|
like <b>httpd</b>, and to emphasis the breaking of the system into clearly
|
||
|
defined components which can be isolated, added, removed or even replaced
|
||
|
with other components easily.
|
||
|
<p>
|
||
|
The final major new feature of the system is the addition of the
|
||
|
/lib/vendor directory. This is intended for kernel modules or other
|
||
|
drivers available from vendors. The goal is to provide a standard
|
||
|
place for vendors to put their drivers even if they are available in
|
||
|
binary-only format. This should encourage vendors to
|
||
|
write drivers for Linux and eventually give away the source code for
|
||
|
that driver, when the hardware is not so cutting edge. Even if
|
||
|
the source code is never released, replacing an existing driver is easier
|
||
|
than writing something from scratch.
|
||
|
<p>
|
||
|
<h3>Conclusion</h3>
|
||
|
<p>
|
||
|
Linux and related utilities have been evolving steadily over
|
||
|
the past few years and have grown to be an extremely robust and rich
|
||
|
system. Standards have played a core role in this, and their evolution
|
||
|
will be even more important if Linux is to continue increasing in popularity.
|
||
|
<p>
|
||
|
I have tried to highlight some points I think are absolutely
|
||
|
essential for the continued success for Linux and Free Software in
|
||
|
general. One major point is that as good as Linux is, it is
|
||
|
not perfect and will have to be in a constant state of evolution. Nothing
|
||
|
should be above change and the ultimate goal should always be speed,
|
||
|
simplicity and elegance.
|
||
|
<p>
|
||
|
Another point I am arguing is that Linux
|
||
|
standards should open up to companies and make it as easy as possible to
|
||
|
add programs, services, or drivers into our system smoothly, even
|
||
|
if they are not free. This will greatly aid in preventing any single
|
||
|
company from monopolizing the system since other companies can make their
|
||
|
own replacements for these components or free versions can be written.
|
||
|
<p>
|
||
|
In
|
||
|
building my own system, I was trying to see what a system might look like
|
||
|
when these ideas are applied. Whether Linux and Linux standards evolve
|
||
|
to something similar to my system or not, I hope some of the concerns I
|
||
|
raised in the article are considered and addressed by the Linux
|
||
|
community.
|
||
|
<p>
|
||
|
<h3>RESOURCE</h3>
|
||
|
<p>
|
||
|
Componentization for the operating system is closely related to commoditizing
|
||
|
computers; Eric Green has a very nice discussion of both at
|
||
|
http://www.linux-hw.com/~eric/commodity.html.
|
||
|
<p>
|
||
|
<!--===================================================================-->
|
||
|
<!--startcut footer ===================================================-->
|
||
|
<P> <hr> <P>
|
||
|
<A HREF="index.html"><IMG ALIGN=BOTTOM SRC="../gx/indexnew.gif"
|
||
|
ALT="[ TABLE OF CONTENTS ]"></A>
|
||
|
<A HREF="../index.html"><IMG ALIGN=BOTTOM SRC="../gx/homenew.gif"
|
||
|
ALT="[ FRONT PAGE ]"></A>
|
||
|
<A HREF="lg_tips46.html"><IMG SRC="../gx/back2.gif"
|
||
|
ALT=" Back "></A>
|
||
|
<A HREF="../faq/index.html"
|
||
|
><IMG SRC="./../gx/dennis/faq.gif"
|
||
|
ALT="[ Linux Gazette FAQ ]"></A>
|
||
|
<A HREF="fauthoux.html"><IMG SRC="../gx/fwd.gif" ALT=" Next "></A>
|
||
|
<P> <hr> <P>
|
||
|
</BODY></HTML>
|
||
|
<!--endcut ============================================================-->
|