A NetWare Loadable Module (NLM) is a
loadable kernel module
In computing, a loadable kernel module (LKM) is an object file that contains code to extend the running kernel, or so-called ''base kernel'', of an operating system. LKMs are typically used to add support for new hardware (as device drivers) and ...
(a
binary
Binary may refer to:
Science and technology Mathematics
* Binary number, a representation of numbers using only two digits (0 and 1)
* Binary function, a function that takes two arguments
* Binary operation, a mathematical operation that ta ...
code module) that can be loaded into
Novell's NetWare operating system. NLMs can implement hardware drivers, server functions (e.g. clustering), applications (e.g.
GroupWise
GroupWise is a messaging and collaboration platform from Micro Focus that supports email, calendaring, personal information management, instant messaging, and document management. The GroupWise platform consists of desktop client software, which ...
), system libraries or utilities.
NLMs were supported beginning with the
Intel 80386
The Intel 386, originally released as 80386 and later renamed i386, is a 32-bit microprocessor introduced in 1985. The first versions had 275,000 transistors[NetWare
NetWare is a discontinued computer network operating system developed by Novell, Inc. It initially used cooperative multitasking to run various services on a personal computer, using the IPX network protocol.
The original NetWare product i ...]
version 3.x. Prior versions of NetWare had a monolithic
kernel
Kernel may refer to:
Computing
* Kernel (operating system), the central component of most operating systems
* Kernel (image processing), a matrix used for image convolution
* Compute kernel, in GPGPU programming
* Kernel method, in machine lea ...
, and significant hardware or functionality changes required re-linking the kernel from object modules.
Due to stability issues with early third-party NLMs, they never became popular for server application programming, with few exceptions like
antivirus
Antivirus software (abbreviated to AV software), also known as anti-malware, is a computer program used to prevent, detect, and remove malware.
Antivirus software was originally developed to detect and remove computer viruses, hence the name. ...
programs,
backup programs and certain
database
In computing, a database is an organized collection of data stored and accessed electronically. Small databases can be stored on a file system, while large databases are hosted on computer clusters or cloud storage. The design of databases spa ...
products.
Functionality
Upon loading, a NLM requests resources, such as memory and process threads, from the NetWare kernel. The NetWare kernel tracks such requests, and can identify memory and other resources assigned to a specific NLM. NLMs may auto-load other NLMs upon which they themselves depend.
NLMs may register commands with the NetWare kernel, extending the command vocabulary available at the NetWare console prompt.
When properly coded, NLMs can be re-entrant, allowing multiple instances of the same code to be loaded and run.
Programming issues
Initially, Novell published a development toolkit for NLM programming including kernel API documentation and a
C compiler
This page is intended to list all current compilers, compiler generators, interpreters, translators, tool foundations, assemblers, automatable command line interfaces ( shells), etc.
Ada Compilers
ALGOL 60 compilers
ALGOL 68 compilers
cf. ...
(
Watcom
Watcom International Corporation was a software company, which was founded in 1981 by Wes Graham and Ian McPhee. Founding staff (Fred Crigger, Jack Schueler and McPhee) were formerly members of Professor Graham's Computer Systems Group at the Uni ...
), but third-party support for the NLM executable function was very limited.
In early NetWare versions (prior to v4.x), all processes were executed in the
kernel
Kernel may refer to:
Computing
* Kernel (operating system), the central component of most operating systems
* Kernel (image processing), a matrix used for image convolution
* Compute kernel, in GPGPU programming
* Kernel method, in machine lea ...
address space, without specific memory protection. It was therefore possible for
bugs in NLMs to overwrite the kernel's or other NLM's address space and ultimately crash the server — in the mainframe-derived Novell terminology, this was known as an ABEND or
ABnormal END
An abnormal end or abend is an abnormal termination of software, or a program crash.
This usage derives from an error message from the IBM OS/360, IBM zOS operating systems. Usually capitalized, but may appear as "abend". Some common ABEND codes ...
.
Moreover, NetWare used a non-preemptive, or
cooperative
A cooperative (also known as co-operative, co-op, or coop) is "an autonomous association of persons united voluntarily to meet their common economic, social and cultural needs and aspirations through a jointly owned and democratically-contro ...
, multitasking model, meaning that an NLM was required to yield to the kernel regularly. An NLM executing an
infinite loop
In computer programming, an infinite loop (or endless loop) is a sequence of instructions that, as written, will continue endlessly, unless an external intervention occurs ("pull the plug"). It may be intentional.
Overview
This differs from:
* ...
, for example, could therefore not be stopped.
In NetWare v4.x, Novell introduced a limited form of memory protection, which was extended to ''Protected Address Spaces'' in NetWare v5.x. Through these mechanisms, properly-coded NLMs can be loaded into their own address space, and mis-behaving NLMs can be prevented from compromising the kernel integrity.
Compilers
Official compilers that produce NLMs are:
*
Watcom C/C++ compiler /
OpenWatcom
*
Metrowerks Codewarrior
CodeWarrior is an integrated development environment (IDE) published by NXP Semiconductors for editing, compiling, and debugging software for several microcontrollers and microprocessors ( Freescale ColdFire, ColdFire+, Kinetis, Qorivva, PX, Free ...
for NetWare
* EPC C/C++
* Novell NLMLINK.EXE
NLM development is also possible with GNU cc and binutils.
More details are available in NetWare Loadable Module Programming HOWTO by Martin Hinner.
Client-side NLMs with NIOS
Announcing it in March 1995,
Novell introduced a new 32-bit DOS/Windows
NetWare
NetWare is a discontinued computer network operating system developed by Novell, Inc. It initially used cooperative multitasking to run various services on a personal computer, using the IPX network protocol.
The original NetWare product i ...
client (
Client 32 based on ODI32/NIOS)
in 1996, replacing the former 16-bit client based on
ODI
ODI may refer to:
* Object Design, Incorporated, a defunct database software company
* One Day International, cricket match
* Open Data Institute, a UK not-for-profit company promoting open data
* Open Data-Link Interface, an implementation of th ...
/VLM. Its NIOS component (
NetWare I/O Subsystem) used techniques similar to
DPMS to relocate and run NLMs in
protected mode
In computing, protected mode, also called protected virtual address mode, is an operational mode of x86-compatible central processing units (CPUs). It allows system software to use features such as virtual memory, paging and safe multi-taskin ...
and
extended memory
In DOS memory management, extended memory refers to memory above the first megabyte (220 bytes) of address space in an IBM PC or compatible with an 80286 or later processor. The term is mainly used under the DOS and Windows operating systems ...
in order to reduce the
conventional memory
In DOS memory management, conventional memory, also called base memory, is the first 640 kilobytes of the memory on IBM PC or compatible systems. It is the read-write memory directly addressable by the processor for use by the operating system ...
footprint of the client down to 2 to 5 KB.
See also
*
Virtual Loadable Module (VLM)
References
Further reading
*
* {{cite web , title=Novell Developer Documentation: Netware Loadable Module , url=http://developer.novell.com/tech/nlm.html , access-date=2010-09-25 , url-status=dead , archive-url=https://web.archive.org/web/20091124201302/http://developer.novell.com/tech/nlm.html , archive-date=2009-11-24
Executable file formats
Novell NetWare