=head1 NAME

nbdkit-release-notes-1.36 - release notes for nbdkit 1.36

=head1 DESCRIPTION

These are the release notes for nbdkit stable release 1.36.
This describes the major changes since 1.34.

nbdkit 1.36.0 was released on B<27 September 2023>.

=head2 Security

No security issues were identified in this release.

All past security issues and information about how to report new ones
can be found in L<nbdkit-security(1)>.

=head2 Plugins

New L<nbdkit-ones-plugin(1)> which creates a fully allocated disk
containing all 0xff (all ones), or another byte of your choice.

L<nbdkit-curl-plugin(1)> now uses a curl "multi" interface.  This
enables much better performance, and also allows the curl plugin to
handle requests in parallel.  The curl plugin now falls back to making
a C<GET> request to get the size of the remote file for certain
servers which do not support C<HEAD> requests.  This plugin adds new
options: C<ipresolve> (force IPv4 or IPv6), C<resolve> (force a
particular IP address), I<-D curl.times=1> (print detailed timing
stats), and I<-D curl.verbose.ids=1> (display connection and transfer
IDs).

L<nbdkit-memory-plugin(1)> now uses a read-write lock to protect
internal structures, resulting in improved performance for mostly read
workloads.

L<nbdkit-data-plugin(1)> now has more optimizations.

L<nbdkit-file-plugin(1)> now supports 4k sector sizes on Windows
(Brian Carnes).

=head2 Filters

New L<nbdkit-evil-filter(1)> adds random but consistent data
corruption to the underlying plugin.

New L<nbdkit-qcow2dec-filter(1)> which can decode qcow2 files (but not
write to them).

L<nbdkit-ip-filter(1)> can now filter by client SELinux label.

L<nbdkit-partition-filter(1)> now supports 4k sector sizes (Brian
Carnes).

L<nbdkit-retry-request-filter(1)> allows the C<get_size> operation to
be retried.

L<nbdkit-tar-filter(1)> adds new C<tar-limit> parameter which can be
used to ensure the filter does not read indefinite amounts of input
when opening the tar file.

Filters can now append their own output to nbdkit I<--dump-plugin>
output.

=head2 Language bindings

Rust bindings add support for C<after_fork>, C<block_size>,
C<nbdkit_debug>, C<nbdkit_is_tls>, C<nbdkit_parse_size>,
C<nbdkit_parse_bool> and C<nbdkit_parse_probability>.  The C<open>
method can now return an error; note this is not backwards compatible
and requires a small source code change to Rust plugins.  (Thanks Alan
Somers)

L<nbdkit-ocaml-plugin(3)> now supports OCaml 5.

OCaml bindings add support for C<nbdkit_stdio_safe>, C<nbdkit_is_tls>,
C<nbdkit_peer_name> and C<nbdkit_peer_security_context>.

L<nbdkit-perl-plugin(3)> now supports Perl 5.38.

Shell script plugins (L<nbdkit-sh-plugin(3)>) may now ignore stdin in
their C<pwrite> method, whereas previously it was required to read and
discard stdin along error paths (thanks Eric Blake).

=head2 Server

When using the I<--run> option, the default is now to use a private
Unix domain socket (as if I<-U -> was specified), whereas in nbdkit
E<le> 1.34 the default was to open a TCP port.  The new default
reflects the most common and safest way to use the I<--run> option.
You can find out if nbdkit has the new behaviour by checking
S<C<nbdkit --dump-config>> and looking for C<run_default_socket=Unix>
in the output.

Debug strings containing control codes and other non-printable
characters are now escaped properly.

New flag I<-D nbdkit.environ=1> can be used to dump the server
environment in debug output.

=head2 API

New C<nbdkit_parse_probability> function which can be used to parse
probabilities in various formats, like C<"10%"> or C<"1:10">.

New C<nbdkit_peer_security_context> function which returns the
security context (usually SELinux label) of the client.

=head2 Bug fixes

Fix long-standing double-free in L<nbdkit-file-plugin(1)> when the
client closes the connection during negotiation (thanks Eric Blake).

nbdkit-file-plugin now has improved error messages when you try to
open a file with an empty name (C<"">).

=head2 Documentation

Miscellaneous documentation improvements for Windows (Brian Carnes).

Fuzzing instructions updated for Clang 17, AFL++ 4.08c.

=head2 Tests

Ongoing CI maintenance and fixes (Laszlo Ersek, Eric Blake).

Many fixes in the test suite for MinGW and Wine.

Several internal consistency checks were added to the test suite, to
ensure, for example, that we always use C<requires_run> when the test
uses the nbdkit I<--run> option.

=head2 Build

Optionally C<zlib-ng> can be used (instead of C<zlib>) for faster
decompression in various places.

No longer link with msvcrt on Windows.

C<awk> is a build requirement.  It was implicitly required before
(because it is needed by the C<./configure> script generated by
autoconf), but now the dependency is explicit (Eric Blake).

=head2 Internals

C<podwrapper> has a new I<--replace> parameter which makes it easier
to use C<AC_SUBST>-substitutions in documentation.

=head1 SEE ALSO

L<nbdkit(1)>.

=head1 AUTHORS

Authors of nbdkit 1.36:

=begin comment

git shortlog -s v1.34.0..

=end comment

=over 4

=item Alan Somers

=item Brian Carnes

=item Eric Blake

=item Laszlo Ersek

=item Richard W.M. Jones

=back

=head1 COPYRIGHT

Copyright Red Hat
