All Projects → pbatard → bled

pbatard / bled

Licence: GPL-2.0 license
Base Library for Easy Decompression

Programming Languages

c
50402 projects - #5 most used programming language
Makefile
30231 projects
shell
77523 projects
M4
1887 projects

Projects that are alternatives of or similar to bled

Archiver
Easily create & extract archives, and compress & decompress files of various formats
Stars: ✭ 3,373 (+15961.9%)
Mutual labels:  gzip, zip, bzip2, xz, compression-formats
ratarmount
Random Access Read-Only Tar Mount
Stars: ✭ 217 (+933.33%)
Mutual labels:  gzip, zip, bzip2, xz
Libarchive
Multi-format archive and compression library
Stars: ✭ 1,625 (+7638.1%)
Mutual labels:  zip, lzma, xz
Libarchivejs
Archive library for browsers
Stars: ✭ 145 (+590.48%)
Mutual labels:  gzip, zip, decompression
pyrus-cramjam
Thin Python wrapper to de/compression algorithms in Rust - lightweight & no dependencies
Stars: ✭ 40 (+90.48%)
Mutual labels:  gzip, bzip2, decompression
EasyCompressor
⚡ A compression library that implements many compression algorithms such as LZ4, Zstd, LZMA, Snappy, Brotli, GZip, and Deflate. It helps you to improve performance by reducing Memory Usage and Network Traffic for caching.
Stars: ✭ 167 (+695.24%)
Mutual labels:  gzip, decompression, lzma
Compress
Optimized Go Compression Packages
Stars: ✭ 2,478 (+11700%)
Mutual labels:  gzip, zip, decompression
Bit7z
A C++ static library offering a clean and simple interface to the 7-zip DLLs.
Stars: ✭ 159 (+657.14%)
Mutual labels:  gzip, zip
Datacompression
Swift libcompression wrapper as an extension for the Data type (GZIP, ZLIB, LZFSE, LZMA, LZ4, deflate, RFC-1950, RFC-1951, RFC-1952)
Stars: ✭ 191 (+809.52%)
Mutual labels:  gzip, zip
Unifiedarchive
UnifiedArchive - an archive manager with a unified way for different formats. Supports all basic (listing, reading, extracting and creation) and specific features (compression level, password-protection). Bundled with console program for working with archives.
Stars: ✭ 246 (+1071.43%)
Mutual labels:  gzip, zip
zzlib
zlib-compressed file depacking library in Lua
Stars: ✭ 44 (+109.52%)
Mutual labels:  gzip, zip
zipstream
A command line tool that allows you to easily share files and directories over the network
Stars: ✭ 49 (+133.33%)
Mutual labels:  gzip, zip
Sharpcompress
SharpCompress is a fully managed C# library to deal with many compression types and formats.
Stars: ✭ 1,397 (+6552.38%)
Mutual labels:  gzip, zip
compress
compress and uncompress for Deno
Stars: ✭ 29 (+38.1%)
Mutual labels:  gzip, zip
box
Box - Open Standard Archive Format, a zip killer.
Stars: ✭ 38 (+80.95%)
Mutual labels:  zip, xz
Turbobench
Compression Benchmark
Stars: ✭ 211 (+904.76%)
Mutual labels:  gzip, zip
Swcompression
A Swift framework for working with compression, archives and containers.
Stars: ✭ 110 (+423.81%)
Mutual labels:  gzip, zip
lambdafs
Efficient (de)compression package for AWS Lambda
Stars: ✭ 24 (+14.29%)
Mutual labels:  gzip, decompression
rbzip2
bzip2 for Ruby
Stars: ✭ 39 (+85.71%)
Mutual labels:  bzip2, decompression
VszLib
7-zip VB6 Helper
Stars: ✭ 35 (+66.67%)
Mutual labels:  zip, lzma

Bled - Base Library for Easy Decompression

What's this then?

This is Bled, the Base Library for Easy Decompression. It is based almost entirely on the native decompression code found in BusyBox.

What's it for?

It's a library, that can be used in applications to handle the decompression of .Z, .gz, .bz2, .lzma, .xz, .zip and (planned) .7z compressed files and/or archives.

Why are you doing that?

Because I need this stuff for Rufus, mostly to handle compressed disk images, and nobody outside of BusyBox seems to have put much effort providing a compact, one-size-fits-all Open Source library, for decompressing the most common formats.

As I am very conscious of size in Rufus, and Busybox is targeted at embedded systems, its decompression library seemed like a natural choice. Sure, the 7-Zip LZMA SDK is nice, and compiles nicely on Windows, but it only supports lzma/lzma2/xz (+.7z archives), so you'll need to add stuff like miniz, and then some more, and soon enough you're dealing with multiple APIs and a lot of duplicated code. Plus these libraries also provide compression support, which we don't need, so the whole thing becomes quite large.

What's the license?

GPLv2 or later.

While the BusyBox project as a whole is GPLv2 only, this library is GPLv2 or later, which means it can be used indiscriminately in GPLv2 or GPLv3 projects. This is possible because the BusyBox sources we used were all explictly tagged GPLv2 or later and any source that wasn't (libbb.h, crc32.c, decompress_unxz.c) has been recreated/replaced with versions that are. Also, since we're not using any part of bzlib there's no additional license notice required. So this really is a pure GPLv2 or later decompression library, for the most common compression formats.

What about compressed tar archives?

I'm not planning to handle these, because I have no need for tar extraction in Rufus. However, since tar archive handling is present in the BusyBox sources, I may accept a patch if you feel like adding support for it.

What about .rar?

Not planning to add support for RAR, unless a truly Free Source (GPL) RAR decompression comes along.

Are there any limitations?

  • Only Windows is supported for now (MinGW/gcc and MSVC). That's because:
    • Windows is the only platform I need for Rufus
    • The original libbb.h was GPLv2 only, so I had to recreate my own from scratch that is GPLv2 or later. This was a bit of a pain, so I'm don't want to bother recreating a GPLv2+ libbb.h for Linux or other platforms.
  • Can't query the uncompressed file size. This is mostly due to the limitation of the compression formats being used, as most of them are stream formats and do not store that information anywhere.
  • .7z archive extraction is not currently supported. But I may add this feature if needed.
  • No multithreading and not optimized for speed at all!
  • There probably exist limitations with regards to advanced compression and/or newer compression formats.

Alright I'm sold. What do I need?

Either:

  • Visual Studio 2019
  • MinGW

Then use the .sln file or run configure + make.

Is the name a reference to Bled, Slovenia?

It is. You should visit Slovenia too, if you ever have a chance.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].