NightStrike wrote: > There are various libncurses packages, as well as a package named just > "ncurses". What is the difference between these?
Linux package management systems work in the same way. It's not really Cygwin or ncurses specific. A package is split into multiple parts for a number of reasons. Lets say you have a package 'foo', that is comprised of some executables as well as some library component, 'libfoo'. This then leads to the following division of packages: foo - executables, documentation, manpages, readme, etc. libfoo<n> - libfoo runtime components (DLL) of ABI version <n> libfoo-devel - files needed by developers that wish to link with libfoo (headers, static library, import library) The reason for putting the DLL alone in its own libfoo<n> package is that other packages that are linked with libfoo can require just that package instead of all of foo. For example, I want to install 'bar' which is some package that is linked to libfoo, but I don't actually care about libfoo at all, I just want bar to work. So bar will just require libfoo5, the DLL of ABI version 5, which allows bar to work without having to install any other parts of foo or libfoo that aren't necessary. The reason for having the ABI version in the package name is so that there can exist multiple versions at once. Without this versioning, upgrading a library would be hell. Suppose you have libfoo that is currently at ABI version 3, and the next release of libfoo adds new features that are not binary backwards compatible. If the libfoo runtime component was just cygfoo.dll without version then there could only be one instance of it in /usr/bin and in order to provide the new libfoo ABI 4, all packages that use libfoo would have to be recompiled and updated at exactly the same time as libfoo. It is unrealistic to think that these kind of flag days can happen with any reasonably large co-operative of volunteers, so instead all the packages that were linked to libfoo3 continue to be linked to libfoo3, and the new libfoo4 is also added to the distro. Any packages that are consumers of libfoo will eventually relink to v4 (and change their package dependencies accordingly) because the import library in libfoo-devel always links to the latest ABI version. Eventually when all libfoo clients have been updated, the now unused libfoo3 package can be removed from the distro, but for some libraries that are used widely this never really happens and so you see all these various versions hanging around. Finally, the reason for splitting the headers, static library, and import library into their own -devel package is because they are not needed by normal users of foo or libfoo, only developers that want to compile and link code that uses libfoo. It's a space saving convenience. Brian -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/