1 Only the most important changes more recent than version 0.6 are noted here.
4 Improved compatibility with version 3584 WIM / ESD files.
6 Performance improvements, including for extraction.
8 'add' commands passed to wimupdate will now replace existing
9 nondirectory files by default. Use the --no-replace option to get the
12 Added support for "WIMBoot" capture and extraction. See the
13 documentation for the new '--wimboot' option to wimcapture and wimapply
16 On UNIX-like systems, you can now backup and restore device nodes, named
17 pipes, and sockets. In addition, 32-bit user and group IDs are now
20 The way that UNIX data is stored in WIM files has been changed. If you
21 captured any WIMs with the --unix-data option, to upgrade them you'll
22 need to apply them with --unix-data using wimlib-imagex v1.6.2, then
23 re-capture them with --unix-data using this version.
25 wimlib now understands tagged metadata items, such as object IDs, that
26 can be stored in WIM directory entries.
28 Removed the --hardlink and --symlink options to wimapply, since I don't
29 think they are too useful and they got in the way of improving the code.
31 WIMs will now retain their GUIDs when rebuilt (e.g. with wimoptimize).
33 The 'mkwinpeimg' script now supports writing the ISO image to standard
36 The <ARCH> element in WIM XML data will now be exported correctly.
38 On Windows, sparse file attributes are no longer set on extracted files.
40 On UNIX, configuring with --disable-xattr or --enable-xattr is no longer
41 supported. Mounting WIM images now always requires extended attribute
42 support. Use --without-fuse to disable support for mounting WIM images.
44 The shared library version has been bumped up. The main
45 incompatibilities are:
47 - WIMLIB_COMPRESSION_TYPE_XPRESS is now 1 and
48 WIMLIB_COMPRESSION_TYPE_LZX is now 2 (so it's the same as
51 - Progress functions, including their prototypes as well as how
52 they are provided to the library, have been changed.
54 - 'struct wimlib_capture_config' has been removed. The library
55 now takes the path to the configuration file directly. This
56 affects wimlib_add_image(), wimlib_add_image_multisource(),
57 and wimlib_update_image(). However no code changes are
58 necessary if a NULL configuration was being used.
60 - Removed deprecated functions: some (de)compression functions,
61 wimlib_extract_files(), and wimlib_print_metadata().
63 - Removed extraction flags: WIMLIB_EXTRACT_FLAG_HARDLINK,
64 WIMLIB_EXTRACT_FLAG_SYMLINK, and
65 WIMLIB_EXTRACT_FLAG_FILE_ORDER.
67 - Removed progress messages:
68 WIMLIB_PROGRESS_MSG_APPLY_TIMESTAMPS,
69 WIMLIB_PROGRESS_MSG_EXTRACT_DIR_STRUCTURE_BEGIN,
70 WIMLIB_PROGRESS_MSG_EXTRACT_DIR_STRUCTURE_END.
72 - WIM paths passed to progress functions now have a leading
76 Case-insensitive comparisons of strings (e.g. filenames) containing
77 UTF-16 codepoints above 32767 are now done correctly.
79 Fixed build failure on Mac OS X.
81 wimunmount now provides the '--new-image' option to cause changes to a
82 read-write mounted image to be committed as a new image rather than as
83 an update of the mounted image. (The corresponding new library flag is
84 WIMLIB_UNMOUNT_FLAG_NEW_IMAGE.)
86 The LZMS ("recovery") compression chunk size, or "dictionary size", may
87 now be up to 1 GiB (1,073,741,824 bytes).
89 The performance of LZX ("maximum") and LZMS ("recovery") compression
90 with large chunk sizes has been slightly improved.
93 Stored files with size exactly 4 GiB (4,294,967,296 bytes) are now
94 decompressed correctly.
96 Fixed a bug in the LZX compressor introduced in v1.5.3. The bug
97 occurred in an unlikely case, and due to validity checks it did not
98 affect successfully created archives.
100 Fixed a minor compatibility issue with the LZMS compressor and
101 decompressor. This is *not* the default compression type and was only
102 introduced in v1.6.0. In the unlikely event that you created an
103 LZMS-compressed WIM with v1.6.0 and a checksum error is reported when
104 applying it with v1.6.1, decompress it with v1.6.0 then compress it with
107 Memory usage for LZMS and LZX compression has been decreased.
109 wimextract now allows wildcard characters in paths specified on the
110 command line. Also, the '--strict-wildcards' option has been removed
111 and replaced with the inverse option '--nullglob'. See the
112 documentation for wimextract for more details and changes.
114 The wimlib_extract_files() function is now considered deprecated in
115 favor of wimlib_extract_paths().
117 Fixed more permissions problems when extracting files on Windows.
119 A new '--no-attributes' option has been added to wimapply and
120 wimextract. The library flag is WIMLIB_EXTRACT_FLAG_NO_ATTRIBUTES.
122 The default chunk size is now set correctly when changing the
123 compression type of a WIM, for example with 'wimoptimize'.
125 The '--metadata' option to wiminfo has been replaced with the
126 '--detailed' option to wimdir.
128 In relevant wimlib-imagex commands, '--solid' may now be used as an
129 alias for '--pack-streams'.
132 Support for extracting and updating the new version 3584 WIMs has been
133 added. These WIMs typically pack many streams ("files") together into a
134 single compressed resource, thereby saving space. This degrades the
135 performance of random access (such as that which occurs on a mounted
136 image), but optimizations have been implemented for extraction. These
137 new WIM files also typically use a new compression format (LZMS), which
138 is similar to LZMA and can offer a better compression ratio than LZX.
139 These new WIM files can be created using `wimcapture' with
140 the '--compress=lzms --pack-streams' options. Note: this new WIM format
141 is used by the Windows 8 web downloader, but important segments of the
142 raw '.esd' files are encrypted, so wimlib will not be able to extract
143 such files until they are first decrypted.
145 wimlib now supports extracting files and directories from a WIM image
146 based on a "listfile" that itself contains the list of paths to extract.
147 For `wimextract', the syntax is to specify @LISTFILE instead of a PATH,
148 and for the library itself, the new APIs are wimlib_extract_pathlist()
149 and wimlib_extract_paths(). Path globs containing wildcard characters
152 For searching WIM files, wimlib now has configurable case sensitivity.
153 The default on Windows is still case-insensitive and the default on
154 UNIX-like systems is still case-sensitive, but this can be overridden
155 on either platform through flags to wimlib_global_init(). For
156 `wimlib-imagex', the environmental variable WIMLIB_IMAGEX_IGNORE_CASE
157 can be set to 1 or 0 for case-insensitive or case-sensitive behavior,
160 Support for compression chunk sizes greater than the default of 32768
161 bytes has been added. A larger chunk size typically results in a better
162 compression ratio. However, the MS implementation is seemingly not
163 compatible with all chunk sizes, especially for LZX compression, so the
164 defaults remain unchanged, with the exception of the new LZMS-compressed
165 WIMs, which use a larger chunk size by default.
167 The compression/decompression API exported by wimlib has been changed.
168 Now one set of functions handles all supported compression formats.
170 `wimcapture' and `wimappend' will now display the progress of scanning
171 the directory tree to capture, in addition to the progress of writing
172 data to the WIM. The '--verbose' option no longer does anything. The
173 library API change for this is the addition of several members to
174 `struct wimlib_progress_info_scan' available to progress callbacks.
176 `mkwinpeimg' now correctly handles the '--start-script' option when the
177 start script is not in the working directory.
179 Sequential extraction, previously requested by using
180 WIMLIB_EXTRACT_FLAG_SEQUENTIAL, is now the default.
181 WIMLIB_EXTRACT_FLAG_FILE_ORDER can be used to get the old default
182 behavior (extract in file order).
185 The new LZX compressor added in v1.5.2 has been improved and is now
186 enabled by default, except when `wimcapture' or `wimappend' is run
187 *without* the '--compress' option, in which case the faster LZX
188 compressor is used (the same as before). This behavior is reasonably
189 consistent with ImageX which actually uses "fast" (XPRESS) compression
190 by default. In those cases, use '--compress=maximum' to explicitly
191 capture a WIM image using the new (slower but better) LZX compressor.
193 The '--compress-slow' option still exists to `wimlib-imagex optimize',
194 but its new behavior is to tweak the new LZX compressor even more to
195 produce an even better compression ratio at the cost of more time spent
198 `wimlib-imagex optimize' now supports the '--compress=TYPE' option,
199 which recompresses the WIM file using the specified compression TYPE.
200 The new library API function used for this is
201 wimlib_set_output_compression_type().
203 Added the wimlib_get_xml_data() function to allow library clients to
204 easily retrieve the raw XML data from a WIM file if needed.
206 Fixed a bug that could cause an error code to be incorrectly returned
207 when writing XML data containing a <WINDOWS> element.
209 Mounted WIM images will now correctly show the default file stream even
210 if appears in the alternate data stream entries of the corresponding WIM
214 Added a new experimental LZX compressor which can be enabled by passing
215 '--compress-slow' to `wimlib-imagex capture' or `wimlib-imagex
216 optimize'. (The latter is only applicable if the WIM is already
217 LZX-compressed and the '--recompress' option is also given.) The
218 experimental compressor is much slower but compresses the data slightly
219 more --- currently usually to within a fraction of a percent of the
220 results from WIMGAPI/ImageX.
222 A workaround has been added for compatibility with versions of WinPE
223 that interpret alternate data stream entries in the boot WIM
226 An alignment bug that caused a crash in the LZX decompressor on some
229 wimlib now attempts to clear the WIM_HDR_FLAG_WRITE_IN_PROGRESS flag in
230 the WIM header when restoring the previous state of a WIM it failed to
233 Added a workaround to avoid an access denied error on Windows when
234 replacing a WIM file that another process has opened.
237 wimlib can now open WinPE WIMs from WAIK v2.1, which had a quirk that
238 needed to be handled.
240 A bug in the interpretation of negative IMAGE indices in the
241 --update-of=[WIMFILE:]IMAGE option to `wimlib-imagex capture' and
242 `wimlib-imagex append' has been fixed.
244 A workaround has been added to successfully apply security descriptors
245 with empty DACLs when the NTFS-3g apply mode is being used with NTFS-3g
246 2013.1.13 or earlier.
248 `wimlib-imagex capture' can now accept the '--delta-from' option
252 Added support for "pipable" WIMs. Pipable WIMs allow capturing images
253 to standard output and applying images from standard input, but they are
254 not compatible with Microsoft's software and are not created by default.
255 See the documentation for --pipable flag of `wimlib-imagex capture' for
258 To better support incremental backups, added support for declaring an
259 image as a modified form of another image. See the documentation for
260 the '--update-of' option of `wimlib-imagex append' and `wimlib-imagex
263 Added supported for "delta" WIMs. See the documentation for the
264 '--delta-from' option of `wimlib-imagex capture'.
266 The library support for managing split WIMs has been changed to support
267 other arrangements, such as delta WIMs, and be easier to use. This
268 change is visible in `wimlib-imagex', which also can now accept the
269 '--ref' option multiple times, and also now supports "delta" WIMs as
272 wimlib now preserves WIM integrity tables by default, even if
273 WIMLIB_WRITE_FLAG_CHECK_INTEGRITY is not specified. This changes the
274 behavior of `wimlib-imagex' whenever the WIM being operated on contains
275 an integrity table and the '--check' option is not specified.
277 `wimlib-imagex capture' now creates LZX-compressed WIMs by default
278 (when --compress is not specified). This provides the best compression
279 ratio by default, which is usually what is desired, at a cost of some
282 `wimlib-imagex' now supports being invoked as wimCOMMAND, where COMMAND
283 is the command as in `wimlib-imagex COMMAND'; for example, it can be
284 invoked as `wimapply' as an alternative to `wimlib-imagex apply'. The
285 appropriate hard links are created in UNIX installations of
286 `wimlib-imagex', while for the Windows distribution of `wimlib-imagex',
287 batch files that emulate this behavior are generated.
289 Security descriptors are now extracted correctly on Windows.
291 Fixed archiving DOS names in NTFS-3g capture mode.
293 The extraction code has been rewritten and it will now be easier to
294 support new features on all supported backends (currently Win32, UNIX,
295 and NTFS-3g). For example, hard-linked extraction mode (--hardlink) is
296 now supported on all backends, not just UNIX.
298 `mkwinpeimg' now supports grabbing files from the WAIK supplement rather
299 than the WAIK itself.
301 wimlib_global_init() now, by default, attempts to acquire additional
302 privileges on Windows, so library clients need not do this.
304 This update bumps the shared library version number up to 9, since it is
305 not binary compatibible with previous releases.
308 Fixed bug in `wimlib-imagex export' that made it impossible to export an
309 image from a WIM that is readonly at the filesystem level.
311 Return error code rather than segfaulting when trying to list files from
312 a non-first part of a split WIM.
314 Joining a WIM will now preserve the RP_FIX and READONLY flags.
317 On Windows, paths given to wimlib-imagex are now treated case
320 Improved behavior regarding invalid filenames; in particular, on
321 Windows, wimlib-imagex will, when extracting, now omit (with an option
322 to override this default) filenames differing only in case, or filenames
323 containing characters not valid on Windows.
325 On Windows, wimlib now supports capturing and extracting long paths
326 (longer than the so-called MAX_PATH).
328 On Windows, `wimlib-imagex update' now acquires proper privileges when
329 running as an Administrator.
331 `wimlib-imagex update' will now complain if no image is specified when
332 trying to update a multi-image WIM.
334 `wimlib-imagex update' now supports specifying a single update command
335 directly on the command line using the --command option.
337 wimlib-imagex will now choose different units for progress messages,
338 depending on the amount of data that needs to be processed.
340 `wimlib-imagex append' will now generate a unique WIM image name if no
341 name is specified and the defaulted name already exists in the WIM.
343 wimlib now allows you to create unnamed WIM images, which can then only
344 be referred to by index.
346 wimlib now allows you to explicitly declare you want write access to a
347 WIM by providing the WIMLIB_OPEN_FLAG_WRITE_ACCESS flag to
350 wimlib now respects the WIM_HDR_FLAG_READONLY flag when set in the WIM
353 Progress callbacks have been added to wimlib's wimlib_update_image()
356 Added wimlib_get_wim_info(), wimlib_set_wim_info(),
357 wimlib_iterate_dir_tree(), and wimlib_iterate_lookup_table() functions
360 NTFS-3g capture now only warns about two conditions previously treated
363 Fixed a couple issues with using wimlib-imagex on UDF filesystems on
366 wimlib now correctly detects and returns an error when reading a WIM
367 image with a cyclic directory structure. (Fun fact: such a WIM will
368 crash Microsoft's software.)
371 Added new "extract" and "update" subcommands to wimlib-imagex, along
372 with associated APIs in the library. These commands are intended mainly
373 for Windows use but can be used on UNIX as well.
375 Many documentation improvements.
377 Fixed a bug in the Windows build where relative symbolic links were not
378 captured in reparse-point fixup mode.
380 Fixed a bug in the Windows build where file handles were left open to
381 the WIM file, causing `wimlib_imagex optimize' to fail in some cases.
383 Fixed a bug in the Windows build of wimlib-imagex where globbing
384 split-WIM parts could cause the program to crash.
386 Fixed a bug where the creation time of WIM images would be shown instead
387 of the last modification time.
389 With the Windows build it is now possible to restore a WIM containing
390 symbolic links as a non-Administrator; however you will receive warnings
391 about not being able to extract the symbolic links.
394 Capturing a WIM image should now be significantly faster in most cases
395 due to improved use of the operating system's cache and avoiding reading
396 files twice whenever possible.
398 The Windows build should now work on Windows XP.
400 The Windows build now supports capturing and restoring hidden,
401 compressed, sparse, and encrypted files.
403 The Windows build now supports capturing and applying WIM images from
404 filesystems other than NTFS (with some reduced functionality).
406 The Windows build now extracts short names correctly.
408 Added support for "reparse-point" fixups (i.e. fixing up of symbolic
409 links). See docs for --rpfix and --norpfix flags of `wimlib-imagex
410 capture' and `wimlib-imagex apply'.
412 The performance of splitting and joining WIMs should be slightly
415 The LZX and XPRESS compression and decompression functions are now
416 exported from the library.
419 Improvements and bugfixes for the Windows build.
421 Added --strict-acls options.
423 Fixed the way that wimlib determines the order of images in the WIM.
426 Since wimlib can now be used on Windows, wimlib's implementation of
427 ImageX has been renamed to wimlib-imagex to avoid confusion with
428 Microsoft's implementation of ImageX, which would have the same file
429 name ("imagex.exe"). If you really don't like this you can pass the
430 --with-imagex-progname option to `configure' to choose a different name,
431 or even simply rename the binary yourself (but the former way will
432 configure the man pages to use the chosen name).
434 Various bugs fixed in the Windows build. Mainly to do with capturing
435 and restoring alternate data streams correctly in weird cases, and
436 requesting the correct privileges when opening files. Also added the
437 --noacls options to wimlib-imagex capture, append, and apply.
439 Windows build again: FindFirstStreamW() and FindNextStreamW() are now
440 dynamically loaded, so this may make the library compatible with Windows
441 XP (however, there may still be other problems).
444 Added experimental support for native Windows builds. Binaries can be
445 downloaded from the SourceForge page.
447 --source-list option added to `imagex capture' and `imagex append'.
449 Better support for different character encodings.
452 Storing UNIX file owners, groups, and modes in WIM images is now
453 possible using `imagex capture' with the --unix-data flag.
455 Minor bug fixes and documentation fixes.
458 NTFS capture: Fixed capturing duplicate reparse points.
460 NTFS capture: Capture first unnamed stream if there are more than one
461 (print warning instead of error).
463 Allow multiple test cases to execute concurrently (e.g. make -j2 check).
466 Added --arch switch to mkwinpeimg script to support getting AMD64 WinPE
469 Update to work with ntfs-3g version 2013.1.13.
472 Fixed truncating file to shorter but non-zero length on read-write
475 Various code cleanups and minor documentation fixes.
478 LZX and XPRESS decompression have received some additional optimizations
479 and should now be even faster. (Although, they were already pretty
480 fast--- much faster than typical I/O speeds.)
482 Fixed a bug introduced in v1.2.1 that would cause a directory tree
483 containing hard links to be captured incorrectly in some cases.
486 By default, unmounting a read-write mounted WIM with 'imagex unmount
487 --commit' will now change the WIM in-place without needing to write the
488 entire WIM again. Use 'imagex unmount --commit --rebuild' to get the
491 'imagex unmount' no longer has a hard-coded limit of 10 minutes to wait
492 for a response from the daemon servicing the mounted WIM. Instead,
493 every second 'imagex unmount' will check if the daemon is still alive,
494 and keep waiting if so, otherwise terminate with an error.
496 'imagex unmount --commit' on a read-write mounted WIM will now print
497 progress information regarding the writing of new or modified streams
498 the WIM, just like when capturing or appending a WIM.
500 A small change has been made to XPRESS compression and it should improve
501 the compression ratio slightly.
503 A change was made that may improve performance slightly when applying a
504 WIM image to a NTFS volume.
506 Microsoft has managed to introduce even more bugs into their software,
507 and now the WIMs for Windows 8 have incorrect (too low) reference counts
508 for some streams. This is unsafe because such streams can be removed
509 when they are in actuality still referenced in the WIM (perhaps by a
510 different image). wimlib will now work around this problem by fixing
511 the stream reference counts. This is only done when wimlib_delete_image() is
512 called ('imagex delete') or when wimlib_mount_image() is called with
513 WIMLIB_MOUNT_FLAG_READWRITE ('imagex mountrw'). Please note that this
514 requires reading the metadata for all images in the WIM, so this will
515 make these operations noticably slower on WIMs with multiple images.
517 Various other bugfixes.
520 Appending images to a WIM is now be done by default without re-building
521 the whole WIM. Use the --rebuild flag to get the old behavior (which
522 was to re-build the entire WIM when a new image is appended).
524 A new command `imagex optimize' is now available to manually re-build a
525 WIM that has wasted space due to repeated appends.
527 Progress information has been improved, and now arbitrary callback
528 functions can be used to show the progress of a WIM operation.
530 A possible bug with changing the bootable image of a WIM was fixed.
532 Some advisory locking is now done to prevent two processes from
533 modifying a WIM at the same time (but only in some cases). For example,
534 you cannot mount two images from a WIM read-write at the same time.
536 Some functions have been reorganized:
537 * wimlib_mount() renamed to wimlib_mount_image().
538 * wimlib_unmount() renamed to wimlib_unmount_image().
539 * wimlib_overwrite_xml_and_header() removed as
540 wimlib_overwrite() suffices now.
541 * wimlib_apply_image_to_ntfs_volume() removed as
542 wimlib_extract_image() suffices now.
543 * wimlib_add_image_from_ntfs_volume() removed as
544 * wimlib_add_image() suffices now.
546 Previously, the soname of libwim.so has been 0.0.0, despite many
547 interface changes. The soname is now updated to 1.0.0 and will now be
548 updated each release.
551 Resources will now be compressed using multiple threads by default.
552 (This applies to `imagex capture', `imagex append', and `imagex
555 Some performance improvements in mounted WIMs.
557 More progress information is shown when capturing a WIM.
560 Lots of minor fixes, code cleanups, and some documentation updates.
561 Nothing in particular is really noteworthy.
564 LZX and XPRESS compression improvements.
566 Fixed calculation of Directory Count, File Count, Total Bytes, and Hard
567 Link Bytes of the WIM.
570 Fixed bug when capturing NTFS file with multiple named data streams.
572 Internally, we are now using inode structures, even though these don't
573 appear literally in the WIM file. This simplifies some of the code
574 (mainly for WIM mounting) and likely fixed a few problems, although it
578 Fixed problem when exporting images from XPRESS to LZX compressed WIM or
582 Enough changes to call it version 1.0.0!
584 Capturing a WIM directly from a NTFS volume, and applying a WIM directly
585 to a NTFS volume, is now supported.
587 Hard links and symbolic links have much improved support. They are
588 supported for WIM capture, WIM application, and mounted WIMs (you can
589 even make them on read-write mounted WIMs).
591 Alternate data streams are now supported on mounted WIMs through an
592 xattr or a Windows-style stream interface. Also they are supported when
593 capturing a WIM from NTFS or applying a WIM to NTFS.
595 Split WIMs are better supported. You may now apply an image directly
596 from a split WIM, mount an image from a split WIM read-only, or export
597 an image from a split WIM.
599 Using a capture configuration file is now supported (but not fully yet).
601 SHA1 message digests are checked in more places, so we can make sure
602 applied and captured data is correct.
604 Man pages have been updated and consolidated.
607 Fixed segfault when unmounting read-only WIM.
610 Support for joining and splitting WIMs.
611 Also, security data is now preserved by default.
614 Can now build with older gcc and system headers, like on CentOS 5.
617 Fixed bug that made it impossible to overwrite files in read-write
621 Write byte-order mark before WIM XML data. (imagex.exe requires this to