If you have ever wanted to process zip files or isos, you've probably seen programs like the libiso9660 library. There are a few ways that you can process iso images and other archive formats in Linux/UNIX systems. The first, and most obvious, is to use shell scripting combined with loop mounting. Unfortunately, this is a rather resource intensive process, and it quickly fails the robustness test.Most other people know about libiso9660, but that library isn't nearly as general as libarchive.

I want to highlight libarchive, since I have used it in a recent project and I was very impressed. The developers were immensely responsive and help to fix any issues that came along. The architecture is a very elegant stream orient API that almost begs to be wrapped in higher level languages. I've in fact wrapped libarchive in Scheme (ChezWEB) so that it's available via the Arctic Repository (I'm working on a new release). It's not complete, but I've absolutely loved working with the libarchive code, which, horrors of horrors, is actually readable! What more could you ask for except for a well documented, well coded, and active library that actually handles almost all of the archive formats you could want automagically?

Kudos to libarchive.