dwarfs-0.10.0
This release doesn't bring a lot of new features or bugfixes to the command-line tools. However, large parts of the code base have been refactored (in more than 300 commits since the last release) and a couple of long-standing issues have been resolved:
-
It is finally possible to properly install the libraries that implement most of DwarFS. These libraries come with all necessary headers and a CMake config script so you can start building your own tools.
-
Shared library builds are now explicitly supported. These have caused some trouble in the past, but the problematic code has been refactored to avoid issue like missing compression / categorizer code.
-
The code now builds about twice as fast. This is due to shipping generated code in the source tarball and removing a lot of dependencies into the
folly
library. -
It is now possible to do modular builds, i.e. the library, tools and FUSE driver can be built independently.
Bugfixes
-
Fixed a race condition identified by ThreadSanitizer in the root node name processing.
-
The terminal abstraction code did not check any errors when trying to determine the terminal width, leading to a random terminal width value. This caused the manual page tests to occasionally crash.
-
Fixed some flaky tests, e.g. unmounting the FUSE driver on macOS.
Features
-
Two sets of universal binaries and binary tarballs are provided for Linux platforms: one without any debug symbols, the other with minimal debug symbols and support for stack traces. For the universal binary, only the version without debug symbols will be UPX-compressed, as the stack trace functionality doesn't work with a compressed binary.
-
Symbolic links to the universal binary may now be suffixed with a version (i.e. any part of the name starting with
-
and followed by a digit will be ignored, e.g. the symlink could bemkdwarfs-0.10
and it would be treated asmkdwarfs
). -
Introduced support for extended attributes on Windows, including a new utility for cross-platform xattr manipulation (
pxattr
, for portable xattr). -
Enhanced file system API, adding error-code based and exception-safe versions for
getattr
,access
, and similar functions. -
Filter rules now consistently use Unix path separators, even for the root path component. Addresses a comment in github discussion #228.
Improvements
-
Extensive refactoring to improve code modularity, maintainability and to provide proper libraries. The library code has been moved to different namespaces to make it easier to understand the role of different components (e.g.
reader
,writer
,extractor
). -
Replaced all
folly
library dependencies in the public DwarFS library interface with alternatives from libraries like e.g.boost
ornlohmann::json
which are more broadly available.folly
andfbthrift
are still used as implementation details, but no longer leak into the public library interfaces. -
A much smaller subset of
folly
is now used in DwarFS and only the necessary components are built, significantly reducing the number of compilation units when building DwarFS. -
It is now possible to do modular builds in addition to the default monolithic build, i.e. you can build and install just the DwarFS libraries and later build/install the tools (
mkdwarfs
, ...) and/or the FUSE driver against these libraries. This is particularly useful for packaging (e.g. in Homebrew, which has removed all FUSE support from the core formulae). -
Shared library builds are now explicitly supported. This fixes issues such as github #184.
-
The source tarball now contains all auto-generated code, e.g. manual pages or generated thrift code. This reduces the number of build-time dependencies (e.g.
ronn
ormistletoe
are no longer required) and significantly reduces the build steps (it is no longer necessary to build the thrift compiler). The build is now roughly twice as fast as in the 0.9.x releases. -
The
parallel-hashmap
,xxHash
andzstd
submodules have been removed from the git repo and are no longer added to the source tarball. BothxxHash
andzstd
are now widely available. If a suitable version ofparallel-hashmap
is found on the system, this will be used, otherwise it will be fetched during the build. Being a header-only library and only used internally, there's no need for it to be installed. -
A lot of GCC warnings have been fixed and upstreamed to
folly
/fbthrift
.
New Contributors
- @mindfocus made their first contribution in #222
Full Changelog: v0.9.10...v0.10.0
SHA-256 Checksums
52045506839249823a9b05b711f89e3fd18a729b264149fbe74f557bd8f16b81 dwarfs-0.10.0-Linux-aarch64-clang-stacktrace.tar.xz
b12a33650694baa6f546ac18768b8a7b2e1dd90c1c674d26bec7f5149a285537 dwarfs-0.10.0-Linux-aarch64-clang.tar.xz
8593eaecc1bed4f570626ff07b0e56a7f6a025c3a5849f4b0056006ab9801393 dwarfs-0.10.0-Linux-x86_64-clang-stacktrace.tar.xz
53f02da7ff7fe484b3bb91e6532987c3fb59db28131309ccbb46d2c2c9cec9ce dwarfs-0.10.0-Linux-x86_64-clang.tar.xz
f24ee132cf0c77b0c94e49b3d8108fdf7e0ff965031bbc34aa51e3c2e066fa43 dwarfs-0.10.0-Windows-AMD64.7z
c01ae59d4662e4f027a7c8a5934b7aebe6edc4f7affd836fa73e6d861d18bf35 dwarfs-0.10.0.tar.xz
573656e33a171017046a32500b9ebe50ebd117df16212e6ef8f8d4b034618210 dwarfs-system-gtest.patch
149c9518d5229bf6dd07b5c39df02ed5cbc4bddbf9bf54f6fa5617d76a594b1c dwarfs-universal-0.10.0-Linux-aarch64-clang
bfaad42a15c687fdaf502283792322692e479c563c56e8734efd9a298956d716 dwarfs-universal-0.10.0-Linux-aarch64-clang-stacktrace
5f3401cdd7267b6eec6f758f902d7d874534cc77b5be7233944832992e2c0081 dwarfs-universal-0.10.0-Linux-x86_64-clang
307f973fd7da525c5f06f6090b4a4f7a0bea041d785dcb718fb226f6b15f942f dwarfs-universal-0.10.0-Linux-x86_64-clang-stacktrace
99cf71972156ec6f5d88ab0331709ecdc1e80f571582fce95c89b694d3be258b dwarfs-universal-0.10.0-Windows-AMD64.exe