In this issue
The next maintenance release of the Apache 1.2 series will be
called Apache 1.2.3. This is identical to the proposed 1.2.2
but with a higher version number due to slight internal
confusion. Just before a release is made, a "final" snapshot
of the Apache code is taken and turned into a distribution
archive. Developers then test this archive on their sites
before giving the release the OK. Normally this snapshot is
marked as being a development version, so that if there are
any problems development can continue. However the snapshot
for 1.2.2 was marked as version "1.2.2". When some (small)
changes were made to the snapshot, the version number had to
be incremented to 1.2.3 otherwise there would have been two
different distributions both marked as "1.2.2".
Apache 1.2.3 will be released shortly. It will fix the same
bugs as given in last week's issue, plus a few proxy module
bugs.
Release: 1.2.1 (Released 6th July 1997) (local download
sites)
Beta: None
Alpha: 1.3a1 (Released 23rd July 1997) (local download
sites)
Patches to Apache 1.2 bugs will be made available in the apply
to 1.2.1 directory on the Apache site. Some new features
and other unofficial patches are available in the 1.2
patches directory. For details of all previously reported
bugs, see the Apache bug database and
Known
Bugs page. Many common configuration questions are
answered in the Apache FAQ.
Faster Performance Accepting Connections
Apache works by creating a number of child processes, all of
which enter a loop where they wait for a request then process
the request. For most operating systems Apache has to be
careful to ensure that only one child tries to accept a new
connection at once. This is called "Serialised Accepts". To
do this it has to implement "mutual exclusion" between the
processes so only one process gets permission to accept the
new connection at any one time. This is currently implemented
by creating a "lock file", locking the file when a child
accepts a connection, then unlocking it once the connection
is accepted. Other children cannot accept the connection
until the file is unlocked.
Depending on the operating system, the file is either locked
using "fcntl" or "flock" system calls. This is controlled by
the definition of either USE_FLOCK_SERIALIZED_ACCEPT or
USE_FCNTL_SERIALIZED_ACCEPT in the conf.h file. This works on
most operating systems and is reasonably efficient (provided
the lock file is not located on an NFS mounted directory,
where it probably will not work correctly anyway). But it can
be made faster on certain operating systems by using other
methods of implementing mutual exclusion.
A proposed development is to add the following methods:
-
POSIX "mutexes". This is an implementation of mutual
exclusion as part of the multi-threading function calls
defined by a POSIX standard. Operating systems with a full
implementation of POSIX multithreading should work with
this method. At present this appears to be Solaris 2 only.
-
System V semaphores. Semaphores provide a means of
inter-process communications between processes on System V
based systems.
-
On IRIX systems, another method of mutual exclusion is
available called "uslocks". This is faster on
multi-processor systems.
It is proposed to make Solaris 2 default to using POSIX threads
mutexes, and for IRIX to use System V semaphores.
In addition to these new methods, some operating systems may
be made faster by allowing multiple processes to go into the
accept stage without bothering with locking. For some other
operating systems this is okay when a single socket is being
used, but does not work with multiple sockets (i.e. multiple
Listens). These systems will be able to define a
new constant to enable serialisation (i.e. locking) when
multiple sockets are involved, but not bother with locking
when using a single socket.
Windows Install Program
The distribution of Apache 1.3 for Windows will come complete
with a proper installations program. This will allow a choice
of components to install (binaries, documentation, source
code, etc) and extract the files from a packed archive. It
may also be able to customise the configuration files for the
installed system.
Better mod_speling
The mod_speling module has been updated. This is an extra
module (not part of the distribution) which can cope with
some types of mistyped URLs. For example, if the user types
the URL with the wrong capitalisation this module looks at
the actual filenames and converts it to (presumably) the
correct capitalisation. This update adds these new features:
-
Update the source to match 1.3 module API
-
Fix real typing errors such as a missing or extra
character, transposed characters or a single mistyped
character
It has not yet been decided if this module will be distributed
with Apache. If not, it will be an additional module
downloadable from the Apache site's contributed
modules directory.
Sources Re-organised for Better Configure and Easier Module Addition
The source code of Apache has been re-organised. Previously
all the source files and most modules were in the
src directory. New modules could also be added
to this directory. This made it large and difficult to
manage. Now all the "core" Apache source code has been moved
to src/core and the modules to
src/modules/standard. The support
directory has been moved to src/support. In
addition, operating system directories have been created
under src/os to enable better organised support
for the three major platforms Apache runs on: Unix, Windows
and OS/2.
The re-organisation has moved modules into directories under
src/modules. For example, all the distributed
modules are now in the src/modules/standard
directory. Additional modules can either be given their own
directory (such as the proxy module), or dropped into the
src/modules/extra directory. As before when a
module is added a line needs adding to
src/Configuration. This is now slightly simpler
since all that needs adding is a line starting
AddModule following by the relative pathname of
the module's .c or .o file. Previously this line also
required the internal module structure name.
The src/Configure program has been updated to
understand all the new file locations, and to make it easier
for module authors to create archives of their modules (ready
to drop into new directories under src/modules).
In addition modules can now get things added to the
compilation options such as extra defines or libraries, and
can be distributed in binary form.
Control Script for Apache
A script to start, stop and restart Apache is under
development. Most users are familiar with the command
kill -USR1 `cat /usr/local/etc/httpd/logs/httpd.pid`
or similar, used to restart Apache. Other simple scripts can
be developed to start Apache at boot-up, to send it an
immediate restart (-HUP) and to stop the server when the
system is being closed down. However for new users these
tasks are not trivial. To make this easier for everyone, a
single script is under development that can perform all these
actions on Apache. This script is also compatible with the
System V style init (used on Linux and other systems) so the
script can be used as a start/stop script in the appropriate
directory (e.g. /etc/rc.d/init.d linked from the
run-level specific directory).
IEEE Internet Computer has an article on
Collaborate Work: The Apache HTTPD Server Project (PDF
format file). This explains the history of the development
process of Apache, and offers some ideas why a group of
individuals would spend time contributing to the project. It
is written by one of the main Apache developers, and also
includes information about the technology used to support
geographically dispersed collaborative development.
The NY Time's CyberTimes online issue contains the article
called
Maligning Free Software Is a Growing Web Tradition (13
August 1997, registration required). This explains that many
people in commercial organisations cannot believe that free
software is worth using, and they prefer to pay large sums of
money for compilers, development environments and operating
systems. Giving examples such as Perl, Apache and GNU
software, the article concludes that "In the end, however,
the developers who do the work know the truth. While clients
may make us build their sites for with expensive software and
systems, a lot of us go home at night to our little pet
projects running on Linux boxes and using Apache with Java
servlets and mySQL.".
Perhaps this next article should be called "Apache Not in the
News". An article about browser and server market share
called
Netscape Maintains Market Share on MediaCentral claims
that Netscape has 85% of the server market - based on
"revenue". This is an interesting way to calculate market
share, and of course Apache would not figure at all in the
totals. But strangely they then give market share for "paid
and unpaid" licenses: Microsoft 39%, Netscape 43%.
Presumably the research on which this is based covered only
servers developed by commercial organisations. The same
research also claims that 50% of email servers are Netscape!
|