The Linux Operating System (Linux OS) is a free Unix clone with a very
large support base. The complete kernel and practically all
necessary applications to build a complete Unix system are available
for free and in source code under the GNU General Public License
(GPL)
.
The Linux OS is a very open and friendly development environment, because so many people are working on parts of the operating system that it is very likely that someone will be able to assist with a problem that arises in the course of an implementation effort.
Most development on the Linux OS is done by people working in their spare time or in an academic research environment. This may sometimes cause delays in the development that are not foreseen by those who only use the developed code. Technological innovations usually take some time to propagate into the Linux environment, because the specifications are hard to get or cost money ( licenses). Both are serious obstacles to people working in their spare time or in the academic world.
The TCP/IP network interface in Linux is based on the BSD socket API, which is standard on most Unix OSs. This API forms the basis of the ATM Socket API [WA96]. The programming interface for sockets is well documented in several textbooks on network programming [WRS90] and online documents.
The socket interface is a very generic ``virtual connection'' interface. It has several properties, among which the protocol used, data structures specific to that protocol and more.
The following is a quote from the ``Quick And Dirty Primer on BSD Sockets''
The Analogy (or: What is a socket, anyway?)The socket is the BSD method for accomplishing interprocess communication (IPC) . What this means is a socket is used to allow one process to speak to another, very much like the telephone is used to allow one person to speak to another.
In other words, the BSD socket interface provides a means to create an association between source and destination(s) for a specified protocol, interface or other means of communication. Both connectionless and connection oriented data can be sent through a socket.
Without going too much into the details of
Operating Systems Design
[MB86], there are two kinds of environments that software can operate in,
kernel-space and user-space. Kernel-space is a privileged mode of
operation and is used by code compiled into the kernel or loaded as
kernel module after the initial boot process. User-space is for
applications executed by users. These applications can be
daemons
,
interactive or batch applications.
Device drivers are always executed in kernel-space, because they need to
access hardware interrupts and other low-level functions not available
in user-space.