|Magic number||NetWare Loadable Module|
|Type of format||Executable, Shared library|
A NetWare Loadable Module (NLM) is a loadable kernel module (a binary 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), system libraries or utilities.
NLMs were supported beginning with the Intel 80386-based NetWare version 3.x. Prior versions of NetWare had a monolithic kernel, 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 programs, backup programs and certain database products.
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.
Initially, Novell published a development toolkit for NLM programming including kernel API documentation and a C compiler (Watcom), 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 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.
Moreover, NetWare used a non-preemptive, or cooperative, multitasking model, meaning that an NLM was required to yield to the kernel regularly. An NLM executing an infinite loop, 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.
Official compilers that produce NLMs are:
- Watcom C/C++ compiler / OpenWatcom
- Metrowerks Codewarrior for NetWare
- EPC C/C++
- Novell NLMLINK.EXE
Client-side NLMs with NIOS
Announced in March 1995, Novell introduced a new 32-bit DOS/Windows NetWare client (Client 32 based on ODI32/NIOS) in 1996, replacing the former 16-bit client based on ODI/VLM. Its NIOS component (NetWare I/O Subsystem) used techniques similar to DPMS to relocate and run NLMs in protected mode and extended memory in order to reduce the conventional memory footprint of the client down to 2 to 5 KB.
- Virtual Loadable Module (VLM)
- "Metrowerks website". Archived from the original on 2009-01-06.
- "NLM development under Linux".
- "NetWare Loadable Module Programming HOWTO".
- "Novell to dress up Tuxedo and deliver 32-bit client". Network World: 141. 1995-03-27. Retrieved 2018-08-18.
- "Network Edition - Cover Story". PC Magazine: NE27. 1995-10-24. Retrieved 2018-08-18.
- Liebing, Edward A. (1996-05-01). "NetWare Client 32 for DOS/Windows: Overview of Architecture and Features". Novell AppNotes. Novell. Archived from the original on 2018-08-18. Retrieved 2018-08-18.
- Hendrick, Ben (1996-11-01). "Overview of NetWare Client 32 for Windows 95". Novell AppNotes. Novell. Archived from the original on 2018-08-18. Retrieved 2018-08-18.
- Paul, Matthias R. (1997-07-30). NWDOS-TIPs — Tips & Tricks rund um Novell DOS 7, mit Blick auf undokumentierte Details, Bugs und Workarounds. MPDOSTIP. Release 157 (in German) (3 ed.). Archived from the original on 2016-05-22. Retrieved 2012-01-11. (NB. NWDOSTIP.TXT is a comprehensive work on Novell DOS 7 and OpenDOS 7.01, including the description of many undocumented features and internals. It is part of the author's yet larger MPDOSTIP.ZIP collection maintained up to 2001 and distributed on many sites at the time. The provided link points to a HTML-converted older version of the NWDOSTIP.TXT file.)
- Davis, Ralph (1991). NetWare 386 Programmer's Guide. Addison-Wesley. ISBN 978-0-201-57709-9.
- "Novell Developer Documentation: Netware Loadable Module". Archived from the original on 2009-11-24. Retrieved 2010-09-25.