"When Linux was first developed, it did not have real support for threading in the kernel. But it did support processes as schedulable entities through the clone() system call. This call created a copy of the calling process, with the copy sharing the address space of the caller. The LinuxThreads project used this system call to simulate thread support entirely in user space. Unfortunately, this approach had a number of disadvantages, particularly in the areas of signal handling, scheduling, and interprocess synchronization primitives. Moreover, the threading model did not conform to POSIX requirements.
"To improve on LinuxThreads, it was clear that some kernel support and a rewritten threads library would be required. Two competing projects were started to address these requirements. A team including developers from IBM worked on NGPT, or Next-Generation POSIX Threads. Meanwhile, developers at Red Hat were working on the NPTL. NGPT was abandoned in mid-2003, leaving the field to NPTL..."