A multiplatform and efficient archive format with portable ANSI C library and ZZZip application
bzt 40c44ab86e Initial commit | 3 years ago | |
---|---|---|
docs | 3 years ago | |
include | 3 years ago | |
src | 3 years ago | |
tests | 3 years ago | |
LICENSE | 3 years ago | |
README.md | 3 years ago |
The name is a pun on comics, referring to sleeping bubbles. That's because files in an archive can't be used as-is, they are "sleeping", first you have to "wake them up" by extracting the archive.
src/lib
is a dependency-free ANSI C library, an SDK with easy to use API (to deal with the format; compressors, decompressors included)src/ZZZip
is a multiplatform front-end application to create and extract archives (Windows, Linux, MacOS)WARNING: the library is finished, fully functional, but the application is still work in progress!
Because existing ones aren't good enough, or they aren't expandable for new OSes.
cpio: clearly designed with only POSIX in mind, requires fields which simply doesn't exists on many OS (i-node, uid and gid for example). It also does not store file type (only mode, which is OS dependent, and since cpio does not store which OS it was created on, this means despite what they say cpio isn't really cross-platform). It is also not possible to store OS-specific attributes with the entries (beyond the standard POSIX attributes, for example it can't store xattr, ACLs, etc).
tar: similar issues as with cpio, clearly designed with only POSIX in mind. Plus point for having an OS independent file type field, but still requires many fields which doesn't exists on many OS, and lacking a way to store specific fields which do exists. The file name limit of 100 bytes (without PAX extensions) is very very limiting these days. Also the spec fails to define many things, like standardized way of storing ACLs for example. It is also not possible to store OS-specific attributes with the entries (without PAX extensions, which are non-portable, GNU tar isn't same as Solaris tar for example).
rar: proprietary, incompatible versions. Out of question. I don't even know if it's capable of storing devices, xattr or ACLs for example.
zip: don't let me start on this one. Plus point that it has flexible OS-specific fields, but other than that its one and only advantage is that it's supported on many many platforms. No standardized support for symlinks, device files, xattr etc.
7-zip: looks like a good idea at first, but if you go deeper, you'll realize it's a terrible choice. Badly written SDK, difficult to port and integrate, file format is overcomlicated and full of bad design choices (many of the xz criticism stands for 7-zip too). Not being transmission error proof is one of its biggest sins. It was designed with only Windows in mind, forget storing POSIX or OS-specific attributes.
(*) - note: arj isn't used any more, but there are still lots of .arj files on the internet for old DOS sources and programs.
Taking a quick look at the limitations, you can see how superior ZZZip is to other existing formats:
Both the libzzz library and the portable multiplatform ZZZip application is licensed under the terms of the MIT license.
Cheers, bzt