As it is the result of a concerted effort of programmers around
the world, Linux wouldn't have been possible without the global
network. So it's not surprising that in the early stages of
development, several people started to work on providing it with
network capabilities. A UUCP implementation was running on Linux
almost from the very beginning, and work on TCP/IP-based networking
started around autumn 1992, when Ross Biro and others created what has
now become known as Net-1.

After Ross quit active development in May 1993, Fred van Kempen began
to work on a new implementation, rewriting major parts of the
code. This project was known as Net-2. The first public release, Net-2d, was
made in the summer of 1993 (as part of the 0.99.10 kernel), and has
since been maintained and expanded by several people, most
notably Alan Cox.[1] Alan's original work was known as
Net-2Debugged. After heavy debugging and numerous improvements to the
code, he changed its name to Net-3 after Linux 1.0 was released. The
Net-3 code was further developed for Linux 1.2 and Linux 2.0. The 2.2
and later kernels use the Net-4 version network support, which remains
the standard official offering today.

The
Net-4 Linux Network code offers a wide variety of device drivers and
advanced features. Standard Net-4 protocols include SLIP and PPP (for
sending network traffic over serial lines), PLIP (for parallel lines),
IPX (for Novell compatible networks, which we'll discuss in Chapter 15), Appletalk (for Apple networks) and AX.25,
NetRom, and Rose (for amateur radio networks). Other standard Net-4
features include IP firewalling, IP accounting (discussed later in
Chapter 9 and Chapter 10), and IP Masquerade (discussed later in
Chapter 11. IP tunnelling in a couple of
different flavors and advanced policy routing are supported. A very
large variety of Ethernet devices is supported, in addition to support
for some FDDI, Token Ring, Frame Relay, and ISDN, and ATM cards.

Additionally, there are a number of other features that greatly
enhance the flexibility of Linux. These features include an
implementation of the SMB filesystem, which interoperates with
applications like lanmanager and Microsoft
Windows, called Samba, written by Andrew Tridgell, and an
implementation of the Novell NCP (NetWare Core Protocol).[2]

There have been, at various times, varying network development efforts active
for Linux.

Fred continued development after
Net-2Debugged was made the official network implementation. This
development led to the Net-2e, which featured a much revised design of
the networking layer. Fred was working toward a standardized Device
Driver Interface (DDI), but the Net-2e work has ended now.

Yet another
implementation of TCP/IP networking came from Matthias
Urlichs, who wrote an ISDN driver for Linux and FreeBSD. For this
driver, he integrated some of the BSD networking code in the Linux
kernel. That project, too is no longer being worked on.

There has been a lot of rapid change in the Linux kernel networking
implementation, and change is still the watchword as development
continues. Sometimes this means that changes also have to occur in
other software, such as the network configuration tools. While this is
no longer as large a problem as it once was, you may still find that
upgrading your kernel to a later version means that you must upgrade
your network configuration tools, too. Fortunately, with the large
number of Linux distributions available today, this is a quite simple
task.

The Net-4 network implementation is now quite mature and is in use at a
very large number of sites around the world. Much work has been done on
improving the performance of the Net-4 implementation, and it now competes
with the best implementations available for the same hardware platforms.
Linux is proliferating in the Internet Service Provider environment, and is
often used to build cheap and reliable World Wide Web servers, mail servers,
and news servers for these sorts of organizations. There is now sufficient
development interest in Linux that it is managing to keep abreast of
networking technology as it changes, and current releases of the Linux kernel
offer the next generation of the IP protocol, IPv6, as a standard offering.

It seems odd now to remember that in the early days of the Linux
network code development, the standard kernel required a huge patch
kit to add the networking support to it. Today, network development
occurs as part of the mainstream Linux kernel development process. The
latest stable Linux kernels can be found on ftp.kernel.org in
/pub/linux/kernel/v2.x/, where
x is an even number. The latest experimental Linux
kernels can be found on ftp.kernel.org
in /pub/linux/kernel/v2.y/, where
y is an odd number. There are Linux kernel source
mirrors all over the world. It is now hard to imagine Linux without
standard network support.