What is the basic difference between NPTL and POSIX threads? How have these two evolved?
I guess your best source of information is starting on Wikipedia and following the links from there.
There is really no difference: NPTL is just the current Linux implementation of POSIX threads, you still use the pthread_* family of functions. Earlier in Linux history, a dedicated library called libpthreads was used. NPTL appeared for 2.6+ kernels circa 2003, see the link above for more details.
[BTW: NPTL == Native Posix Threads Library]