News
News
## Version 1.14.4
- Fixed potential crash when writing WIM XML data, introduced in v1.14.0.
- Fixed the Windows build script to avoid an unnecessary DLL dependency when
building with MSYS2 MINGW32 or MSYS2 MINGW64.
## Version 1.14.3
## Version 1.14.2
- Fixed an issue where some WIM images written by wimlib weren't accepted by
some MS software versions. wimlib-written WIM images containing directory
reparse points (e.g. junctions) weren't accepted by some versions of the
Windows 8 setup wizard. Also, recent versions of DISM had stopped accepting
wimlib-written WIM images containing directories with named data streams.
## Version 1.14.1
- Fixed a bug introduced in v1.14.0 where wimlib would crash on older CPUs.
## Version 1.14.0
- Upgraded the support for mounting WIM images on Linux from fuse2 to fuse3.
fuse2 is no longer supported.
- Simplified the process of building wimlib for Windows. See README.WINDOWS for
the updated instructions, which use MSYS2 instead of Cygwin. Windows ARM64
builds are now supported (experimentally) as well.
- Fixed a bug in `wimsplit` where it didn't accept part sizes of 4 GiB or larger
on Windows and on 32-bit platforms.
- `wimupdate` now supports the `--ref` option. It should be specified when
updating a delta WIM to avoid two minor issues.
- `wimoptimize` now has better default behavior when converting to and from
solid archives, i.e. WIM <=> ESD. It now is consistent with `wimcapture` and
`wimexport`. For WIM => ESD, `wimoptimize --solid` now works. Before, the
needed command was `wimoptimize --solid --compress=LZMS --chunk-size=128K`.
For ESD => WIM, `wimoptimize --compress=LZX` now works. Before, the needed
command was `wimoptimize --compress=LZX --chunk-size=32K`.
## Version 1.13.6
- Reduced the maximum number of file descriptors that wimlib can use when
extracting files from a WIM image on macOS.
- The files that used the CC0 public domain dedication now use the MIT license
instead.
## Version 1.13.5
- wimlib now warns rather than aborts if two files have the same SHA-1
hash but different sizes.
## Version 1.13.4
- wimsplit now prints progress messages regularly rather than just once per WIM
part.
- Added support for a data recovery mode which causes files to be extracted even
if they are corrupted. The option is `--recover-data` for `wimapply` and
`wimextract`, and `WIMLIB_EXTRACT_FLAG_RECOVER_DATA` for the library. Note
that this option won't help with all types of corruption; some types of
corruption will still cause a fatal error.
## Version 1.13.3
## Version 1.13.2
## Version 1.13.1
## Version 1.13.0
- `wimextract` now reads a pathlist file from standard input when `@-` is given
as an argument.
## Version 1.12.0
- Fixed a bug that was causing the LZMS decompressor to be miscompiled with GCC
7 (this broke extracting "solid" archives).
- The Windows 10 Recycle Bin directory (`\$RECYCLE.BIN`) has been added to the
default exclusion list.
- The `mkwinpeimg` script now also looks for the syslinux BIOS modules in the
directory `/usr/lib/syslinux/modules/bios`.
- Files with timestamps before the year 1970 are now extracted correctly to
UNIX-style filesystems, are displayed correctly by `wimdir --detailed`, and
show up correctly in mounted WIM images.
- Files with timestamps after the year 2038 are now displayed correctly by the
32-bit Windows build of wimlib.
## Version 1.11.0
- Sparse files captured from UNIX-style filesystems are now marked as sparse in
the resulting WIM image.
- Added support for storing Linux-style extended attributes in WIM images. When
the `--unix-data` option is used on Linux, `wimlib-imagex` now captures and
applies extended attributes, in addition to the already-supported standard
UNIX file permissions (owner/group/mode) and special files.
- On Windows, improved the way in which files deduplicated with Windows' Data
Deduplication feature are captured.
- The development files needed to link with wimlib using Visual Studio are now
included in the Windows release archives.
- The example programs can now be compiled in C++ mode, and they also now work
on Windows.
## Version 1.10.0
- The LZX compression ratio has been slightly improved. The default mode, LZX
level 50, is now almost as good as the old LZX level 100, while being nearly
the same speed as before.
- On UNIX-like systems, wimlib can now process Windows filenames that are
not valid Unicode due to the presence of unpaired surrogates.
- On UNIX-like systems, wimlib now always assumes UTF-8 encoding with the
addition of surrogate codepoints. Consequently, the environmental variable
`WIMLIB_IMAGEX_USE_UTF8` and the flag `WIMLIB_INIT_FLAG_ASSUME_UTF8` no longer
have any effect.
- When a WIM image is applied in NTFS-3G mode, security descriptors are now
created in NTFS v3.0 format when supported by the volume.
- Workarounds for bugs in libntfs-3g version 2013.1.13 and earlier have been
removed. Users are advised to upgrade to a later version of libntfs-3g.
## Version 1.9.2
- On Windows, fixed a bug where wimlib could leave a null DACL (a.k.a. "no NTFS
permissions") set on some existing directories after extraction.
- On Windows, when applying a WIM image in "WIMBoot mode" when the WOF driver is
not loaded, wimlib can now correctly register a new WIM file with the target
volume when the target volume previously had had WIM files unregistered.
- Clarified the main license text and updated public domain dedications for
certain files to be more thorough.
## Version 1.9.1
- Object IDs are now saved and restored on Windows and in NTFS-3G mode.
- Windows-specific updates:
- Fixed a bug where the `.cmd` shortcuts for `wimlib-imagex` wouldn't work if
their full path contained a space.
## Version 1.9.0
- Added experimental support for Windows VSS (Volume Shadow Copy Service). The
new `--snapshot` argument to `wimcapture` makes wimlib automatically create
and use a temporary VSS snapshot when capturing a WIM image.
- The progress messages printed by `wimlib-imagex` while writing WIM files have
been slightly tweaked.
- Progress information for directory tree scans now counts all hard links.
Also, on Windows `\\?\` is no longer stripped from the current path.
- Fixed a bug where, on Windows, wimlib would change the security descriptor of
the target directory of an extraction even when the `--no-acls` option was
specified.
## Version 1.8.3
- Fixed a bug with libntfs-3g extraction present since v1.8.1. Sometimes, some
Microsoft software would not correctly recognize data in the resulting
filesystem.
- Made some small improvements to the compression algorithms:
- LZX compression ratio was slightly improved.
- XPRESS compression ratio and speed was slightly improved.
- LZMS compression speed was slightly improved.
## Version 1.8.2
- This release primarily contains various minor bug fixes and improvements,
including:
- Fixed a bug where on 32-bit systems, the library could enter an infinite
loop if a WIM file was malformed in a specific way.
- Added a workaround for a case where libntfs-3g may report duplicate streams
in an NTFS file.
- Windows symbolic links and junctions in mounted WIM images are now
automatically rewritten to be valid in the mounted location.
## Version 1.8.1
- Fixed a bug in the LZX decompressor: malicious input data could cause out of
bounds writes to memory (since wimlib v1.2.2).
- The output of the `wiminfo` command now consolidates various boolean flags
(such as "Relative path junction") into a single line.
- A file can now have both an unnamed data stream ("file contents") and a
reparse point stream. Such files can exist as a result of the use of certain
Windows features, such as offline storage, including "OneDrive". wimlib will
now store and restore both streams on Windows as well as in NTFS-3G mode.
Microsoft's WIMGAPI also has this behavior.
- On Windows, named data streams of encrypted files are no longer stored twice
in WIM archives.
- The way the "file count", "directory count", "total bytes", and "hard link
bytes" image statistics (stored in the WIM XML data) is calculated has been
slightly changed.
- In mounted WIM images, the disk usage provided for each file (`st_blocks`) is
now the compressed size rather than the uncompressed size.
- The performance of the NTFS-3G and Windows capture modes has been slightly
improved.
- Improved the LZX compressor. It is now 15-20% faster than before and provides
a slightly better compression ratio.
- Files are now sorted by name extension when creating a solid WIM file.
## Version 1.7.4
- The Windows binary distribution no longer contains third party DLLs. These
dependencies are instead compiled directly into the libwim DLL.
## Version 1.7.3
- Fix for very slow export from solid WIM / ESD files.
- Fix for LZX and LZMS algorithms on non-x86 architectures, such as ARM.
- When not using the WOF driver, extraction no longer fails if the disk
containing the WIM file has too many partitions.
## Version 1.7.2
- Added a workaround for an issue where in rare cases, wimlib could create a
compressed data stream that could not be read correctly by Windows after an
extraction in "WIMBoot" mode.
- Library changes:
- Added support for testing file exclusions via the user-provided progress
function.
## Version 1.7.1
- The default compression mode for wimcapture is now LZX compression in its
default mode, which is the same as `--compress=maximum`.
- Custom compressor parameters have been removed from the library in favor of
the simpler level-based API.
- Library users can now specify a custom file for warning and error messages
to be sent to, rather than the default of standard error.
## Version 1.7.0
- Add support for reading and writing multiple solid blocks per archive, which
WIMGAPI/DISM can create when appending an image.
- The license for the library now contains an exception that allows using it
under the LGPL. See the COPYING file for details.
- In reparse-point fixup mode (the default for capture), symbolic links and
junctions that point outside the tree being captured are no longer excluded
from capture.
- Added support for "WIMBoot" capture and extraction. See the documentation for
the new `--wimboot` option to wimcapture and wimapply for more information.
- On UNIX-like systems, you can now backup and restore device nodes, named
pipes, and sockets. In addition, 32-bit user and group IDs are now supported.
- The way that UNIX data is stored in WIM files has been changed. If you
captured any WIMs with the `--unix-data` option, to upgrade them you'll need
to apply them with `--unix-data` using `wimlib-imagex` v1.6.2, then re-capture
them with `--unix-data` using this version.
- wimlib now understands tagged metadata items, such as object IDs, that
can be stored in WIM directory entries.
- The `mkwinpeimg` script now supports writing the ISO image to standard output.
- The shared library version has been bumped up. The main incompatibilities
are:
- `struct wimlib_capture_config` has been removed. The library now takes the
path to the configuration file directly. This affects `wimlib_add_image()`,
`wimlib_add_image_multisource()`, and `wimlib_update_image()`. However, a
NULL value passed in the argument retains the same meaning.
## Version 1.6.2
- The LZMS ("recovery") compression chunk size, or "dictionary size", may now be
up to 1 GiB (1,073,741,824 bytes).
## Version 1.6.1
- Stored files with size exactly 4 GiB (4,294,967,296 bytes) are now
decompressed correctly.
- Fixed a bug in the LZX compressor introduced in v1.5.3. The bug occurred in
an unlikely case, and due to validity checks it did not affect successfully
created archives.
- Fixed a minor compatibility issue with the LZMS compressor and decompressor.
This is *not* the default compression type and was only introduced in v1.6.0.
In the unlikely event that you created an LZMS-compressed WIM with v1.6.0 and
a checksum error is reported when applying it with v1.6.1, decompress it with
v1.6.0 then compress it with v1.6.1.
- Memory usage for LZMS and LZX compression has been decreased.
- The default chunk size is now set correctly when changing the compression type
of a WIM, for example with `wimoptimize`.
- The `--metadata` option to `wiminfo` has been replaced with the `--detailed`
option to `wimdir`.
## Version 1.6.0
- Support for extracting and updating the new version 3584 WIMs has been added.
These WIMs typically pack many streams ("files") together into a single
compressed resource, thereby saving space. This degrades the performance of
random access (such as that which occurs on a mounted image), but
optimizations have been implemented for extraction. These new WIM files also
typically use a new compression format (LZMS), which is similar to LZMA and
can offer a better compression ratio than LZX. These new WIM files can be
created using `wimcapture` with the `--compress=lzms --pack-streams` options.
Note: this new WIM format is used by the Windows 8 web downloader, but
important segments of the raw `.esd` files are encrypted, so wimlib will not
be able to extract such files until they are first decrypted.
- wimlib now supports extracting files and directories from a WIM image based on
a "listfile" that itself contains the list of paths to extract. For
`wimextract`, the syntax is to specify `@LISTFILE` instead of a `PATH`, and
for the library itself, the new APIs are `wimlib_extract_pathlist()` and
`wimlib_extract_paths()`. Path globs containing wildcard characters are
supported.
- For searching WIM files, wimlib now has configurable case sensitivity. The
default on Windows is still case-insensitive and the default on UNIX-like
systems is still case-sensitive, but this can be overridden on either platform
through flags to `wimlib_global_init()`. For `wimlib-imagex`, the
environmental variable `WIMLIB_IMAGEX_IGNORE_CASE` can be set to 1 or 0 for
case-insensitive or case-sensitive behavior, respectively.
- Support for compression chunk sizes greater than the default of 32768
bytes has been added. A larger chunk size typically results in a better
compression ratio. However, the MS implementation is seemingly not
compatible with all chunk sizes, especially for LZX compression, so the
defaults remain unchanged, with the exception of the new LZMS-compressed
WIMs, which use a larger chunk size by default.
- `wimcapture` and `wimappend` will now display the progress of scanning the
directory tree to capture, in addition to the progress of writing data to the
WIM. The `--verbose` option no longer does anything. The library API change
for this is the addition of several members to `struct
wimlib_progress_info_scan` available to progress callbacks.
- `mkwinpeimg` now correctly handles the `--start-script` option when the start
script is not in the working directory.
## Version 1.5.3
- The new LZX compressor added in v1.5.2 has been improved and is now enabled by
default, except when `wimcapture` or `wimappend` is run *without* the
`--compress` option, in which case the faster LZX compressor is used (the same
as before). This behavior is reasonably consistent with ImageX which actually
uses "fast" (XPRESS) compression by default. In those cases, use
`--compress=maximum` to explicitly capture a WIM image using the new (slower
but better) LZX compressor.
- Fixed a bug that could cause an error code to be incorrectly returned when
writing XML data containing a `<WINDOWS>` element.
- Mounted WIM images will now correctly show the default file stream even if
appears in the alternate data stream entries of the corresponding WIM
directory entry.
## Version 1.5.2
- A workaround has been added for compatibility with versions of WinPE that
interpret alternate data stream entries in the boot WIM incorrectly.
- An alignment bug that caused a crash in the LZX decompressor on some builds
was fixed.
## Version 1.5.1
- wimlib can now open WinPE WIMs from WAIK v2.1, which had a quirk that needed
to be handled.
## Version 1.5.0
- Added support for "pipable" WIMs. Pipable WIMs allow capturing images to
standard output and applying images from standard input, but they are not
compatible with Microsoft's software and are not created by default. See the
documentation for `--pipable` flag of `wimlib-imagex capture` for more
information.
- To better support incremental backups, added support for declaring an image as
a modified form of another image. See the documentation for the `--update-of`
option of `wimlib-imagex append` and `wimlib-imagex capture`.
- Added supported for "delta" WIMs. See the documentation for the
`--delta-from` option of `wimlib-imagex capture`.
- The library support for managing split WIMs has been changed to support other
arrangements, such as delta WIMs, and be easier to use. This change is
visible in `wimlib-imagex`, which also can now accept the `--ref` option
multiple times, and also now supports "delta" WIMs as mentioned above.
- The extraction code has been rewritten and it will now be easier to support
new features on all supported backends (currently Win32, UNIX, and NTFS-3G).
For example, hard-linked extraction mode (`--hardlink`) is now supported on
all backends, not just UNIX.
- `mkwinpeimg` now supports grabbing files from the WAIK supplement rather
than the WAIK itself.
- This update bumps the shared library version number up to 9, since it is not
binary compatibible with previous releases.
## Version 1.4.2
- Return error code rather than segfaulting when trying to list files from a
non-first part of a split WIM.
- Joining a WIM will now preserve the `RP_FIX` and `READONLY` flags.
## Version 1.4.1
- On Windows, paths given to `wimlib-imagex` are now treated case insensitively.
- On Windows, wimlib now supports capturing and extracting long paths (longer
than the so-called `MAX_PATH`).
- `wimlib-imagex append` will now generate a unique WIM image name if no name is
specified and the defaulted name already exists in the WIM.
- wimlib now allows you to create unnamed WIM images, which can then only be
referred to by index.
- wimlib now allows you to explicitly declare you want write access to a WIM by
providing the `WIMLIB_OPEN_FLAG_WRITE_ACCESS` flag to `wimlib_open_wim()`.
- wimlib now respects the `WIM_HDR_FLAG_READONLY` flag when set in the WIM header.
- NTFS-3G capture now only warns about two conditions previously treated as
errors.
- wimlib now correctly detects and returns an error when reading a WIM image
with a cyclic directory structure. (Fun fact: such a WIM will crash
Microsoft's software.)
## Version 1.4.0
- Fixed a bug in the Windows build where relative symbolic links were not
captured in reparse-point fixup mode.
- Fixed a bug in the Windows build where file handles were left open to the WIM
file, causing `wimlib-imagex optimize` to fail in some cases.
- Fixed a bug where the creation time of WIM images would be shown instead of
the last modification time.
- With the Windows build it is now possible to restore a WIM containing symbolic
links as a non-Administrator; however you will receive warnings about not
being able to extract the symbolic links.
## Version 1.3.3
- Capturing a WIM image should now be significantly faster in most cases due to
improved use of the operating system's cache and avoiding reading files twice
whenever possible.
- The Windows build now supports capturing and restoring hidden, compressed,
sparse, and encrypted files.
- The Windows build now supports capturing and applying WIM images from
filesystems other than NTFS (with some reduced functionality).
- The LZX and XPRESS compression and decompression functions are now exported
from the library.
## Version 1.3.2
- Fixed the way that wimlib determines the order of images in the WIM.
## Version 1.3.1
- Since wimlib can now be used on Windows, wimlib's implementation of ImageX has
been renamed to `wimlib-imagex` to avoid confusion with Microsoft's
implementation of ImageX, which would have the same file name (`imagex.exe`).
If you really don't like this you can pass the `--with-imagex-progname` option
to `configure` to choose a different name, or even simply rename the binary
yourself (but the former way will configure the man pages to use the chosen
name).
- Various bugs fixed in the Windows build. Mainly to do with capturing and
restoring alternate data streams correctly in weird cases, and requesting the
correct privileges when opening files. Also added the `--noacls` options to
`wimlib-imagex` capture, append, and apply.
## Version 1.3.0
## Version 1.2.6
- Storing UNIX file owners, groups, and modes in WIM images is now
- possible using `imagex capture` with the `--unix-data` flag.
## Version 1.2.5
- NTFS capture: Capture first unnamed stream if there are more than one (print
warning instead of error).
- Allow multiple test cases to execute concurrently (e.g. `make -j2 check`).
## Version 1.2.4
- Added `--arch` switch to mkwinpeimg script to support getting AMD64 WinPE from
the WAIK.
## Version 1.2.3
- Fixed truncating file to shorter but non-zero length on read-write mounted WIM
image.
## Version 1.2.2
- LZX and XPRESS decompression have received some additional optimizations and
should now be even faster. (Although, they were already pretty fast --- much
faster than typical I/O speeds.)
- Fixed a bug introduced in v1.2.1 that would cause a directory tree containing
hard links to be captured incorrectly in some cases.
## Version 1.2.1
- `imagex unmount --commit` on a read-write mounted WIM will now print progress
information regarding the writing of new or modified streams the WIM, just
like when capturing or appending a WIM.
- A small change has been made to XPRESS compression and it should improve the
compression ratio slightly.
- A change was made that may improve performance slightly when applying a WIM
image to a NTFS volume.
- Microsoft has managed to introduce even more bugs into their software, and now
the WIMs for Windows 8 have incorrect (too low) reference counts for some
streams. This is unsafe because such streams can be removed when they are in
actuality still referenced in the WIM (perhaps by a different image). wimlib
will now work around this problem by fixing the stream reference counts. This
is only done when `wimlib_delete_image()` is called (`imagex delete`) or when
`wimlib_mount_image()` is called with `WIMLIB_MOUNT_FLAG_READWRITE` (`imagex
mountrw`). Please note that this requires reading the metadata for all images
in the WIM, so this will make these operations noticably slower on WIMs with
multiple images.
## Version 1.2.0
- Progress information has been improved, and now arbitrary callback functions
can be used to show the progress of a WIM operation.
- A possible bug with changing the bootable image of a WIM was fixed.
- Some advisory locking is now done to prevent two processes from modifying a
WIM at the same time (but only in some cases). For example, you cannot mount
two images from a WIM read-write at the same time.
## Version 1.1.0
## Version 1.0.4
- Lots of minor fixes, code cleanups, and some documentation updates. Nothing
in particular is really noteworthy.
## Version 1.0.3
- Fixed calculation of Directory Count, File Count, Total Bytes, and Hard Link
Bytes of the WIM.
## Version 1.0.2
- Fixed bug when capturing NTFS file with multiple named data streams.
- Internally, we are now using inode structures, even though these don't appear
literally in the WIM file. This simplifies some of the code (mainly for WIM
mounting) and likely fixed a few problems, although it needs more testing.
## Version 1.0.1
- Fixed problem when exporting images from XPRESS to LZX compressed WIM or vice
versa
## Version 1.0.0
- Capturing a WIM directly from a NTFS volume, and applying a WIM directly to a
NTFS volume, is now supported.
- Hard links and symbolic links have much improved support. They are supported
for WIM capture, WIM application, and mounted WIMs (you can even make them on
read-write mounted WIMs).
- Alternate data streams are now supported on mounted WIMs through an xattr or a
Windows-style stream interface. Also they are supported when capturing a WIM
from NTFS or applying a WIM to NTFS.
- Split WIMs are better supported. You may now apply an image directly from a
split WIM, mount an image from a split WIM read-only, or export an image from
a split WIM.
- Using a capture configuration file is now supported (but not fully yet).
- SHA1 message digests are checked in more places, so we can make sure applied
and captured data is correct.
## Version 0.7.2
## Version 0.7.1
## Version 0.6.3
- Can now build with older gcc and system headers, like on CentOS 5.
## Version 0.6.2
## Version 0.6.1
- Write byte-order mark before WIM XML data. (`imagex.exe` requires this to be
there.)