Jump to content

NetWare Loadable Module

From Alfawiki
Novell
IndustrySoftware
Founded1983; 43 years ago (1983)
Headquarters
Provo
,
United States
ProductsNetWare, NetWare Loadable Module (NLM)

A NetWare Loadable Module (NLM) refers to a kernel module in binary form that can be dynamically inserted into the NetWare operating system by Novell. These modules serve various purposes, including implementing device drivers, server capabilities such as clustering, applications like GroupWise, system libraries, and utility tools.

Support for NLMs was introduced with the Intel 80386-based NetWare 3.x series. Prior to this, NetWare featured a monolithic kernel architecture that required recompilation to modify hardware support or add new features. Initial third-party NLMs often experienced stability problems, which restricted their widespread use in server environments beyond specific functions such as antivirus solutions, backup utilities, and certain database applications.

Functionality

Upon loading, an NLM obtains resources such as memory and processing threads from the NetWare kernel, which manages resource allocation on a per-module basis. These modules can also automatically load other dependent NLMs and have the capability to register new commands to enhance the NetWare console interface. When designed correctly, NLMs support re-entrant execution, enabling multiple instances to operate simultaneously.

Programming issues

Novell originally supplied developers with a toolkit containing kernel API documentation and a C compiler (Watcom) for creating NLMs; however, external development support remained limited.

Before the release of NetWare version 4.x, all processes executed within the kernel's address space without any memory protection. Consequently, programming errors within an NLM could corrupt kernel memory or interfere with other modules, leading to system crashes referred to as ABENDs. The operating system relied on cooperative multitasking, so NLMs were required to relinquish control periodically; failure to do so—such as entering an infinite loop—could cause the entire server to become unresponsive.

NetWare 4.x introduced partial memory protection mechanisms, which were further enhanced in version 5.x through Protected Address Spaces. These improvements allow well-designed NLMs to run within isolated memory regions, thereby safeguarding the kernel from malfunctioning modules.

Compilers

The officially supported compilers for generating NLM binaries include:

Additionally, GNU cc and binutils can be used for NLM development. More comprehensive technical information is available in Martin Hinner’s NetWare Loadable Module Programming HOWTO.

Client-side NLMs with NIOS

In March 1995, Novell unveiled a 32-bit DOS/Windows client for NetWare called Client 32 (based on ODI32/NIOS), which was released in 1996 as a successor to the older 16-bit ODI/VLM client. Its NIOS component (NetWare I/O Subsystem) utilized methods similar to those employed by DPMS, enabling NLMs to run in protected mode and access extended memory. This approach substantially reduced the conventional memory usage of the client to between 2 and 5 KB.

See also

Further reading

  • NetWare 386 Programmer's Guide by Ralph Davis, Addison-Wesley, 1991, ISBN 978-0-201-57709-9
  • Novell Developer Documentation: Netware Loadable Module (archived), developer.novell.com