From 6f0131ff3e72d7fc8b2f2bbcfbd34e9a193414f2 Mon Sep 17 00:00:00 2001 From: Kleis Auke Wolthuizen Date: Thu, 3 Jun 2021 15:35:26 +0200 Subject: [PATCH 1/4] Add notes to thread recycling / loadable modules --- whats-new.md | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/whats-new.md b/whats-new.md index 101915eb..cc672d32 100644 --- a/whats-new.md +++ b/whats-new.md @@ -12,15 +12,11 @@ kleisauke and others for their great work on this release. [Lunaphore](https://www.lunaphore.ch/) kindly sponsored the development of the new JPEG2000 features, see below. -# Loadable modules for some image format loaders - -- move openslide, libheif, poppler and magick to loadable modules [kleisauke] - # Experimental JPEG-XL support libvips 8.11 includes experimental support for JPEG-XL load and save. -(JPEG-XL)[https://jpeg.org/jpegxl/] is a promising new iteration of the JPEG +[JPEG-XL](https://jpeg.org/jpegxl/) is a promising new iteration of the JPEG standard that's currently being developed. The Chrome web browser supports it, though behind a flag, and it looks like it might be enabled by default this autumn in Chrome 89. @@ -64,8 +60,30 @@ be squeezed out. # Thread recycling -- new threading model has a single threadpool shared by all - pipelines [kleisauke] +The threading system of libvips was revamped, the new implementation uses +[GLib's thread pool](https://developer.gnome.org/glib/stable/glib-Thread-Pools.html) +semantics, which is a single thread pool shared across all pipelines. This +implementation allows the reuse of already started threads. + +This was originally intended for WebAssembly but it turned out to be useful +for native environments as well. Relative speed-ups are varying between ~4% +and ~15% compared to the previous implementation. Especially for short-lived +pipelines and long-running processes, a performance improvement can be observed. + +# Loadable modules for some dependencies + +libvips now supports building OpenSlide, libheif, Poppler and +{Image,Graphics}Magick as a dynamically loadable module. This makes it easier +for distributions to provide separate (optional) packages for these dependencies, +making the core package much slimmer. + +[GModule](https://developer.gnome.org/glib/stable/glib-Dynamic-Loading-of-Modules.html) +is used to accomplish this in a portable way. We already had a simple plugin system +based on this, but the build part was not yet implemented. + +These loadable modules are built automatically when GModule is supported, which +should be supported on at least Linux, Windows and macOS. It can be disabled +by passing `--disable-modules` while configuring libvips. # Full-colour text rendering From 2c4946d0661c6c3552962347c2423e13dd3be815 Mon Sep 17 00:00:00 2001 From: Kleis Auke Wolthuizen Date: Thu, 3 Jun 2021 15:45:19 +0200 Subject: [PATCH 2/4] Wording --- whats-new.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/whats-new.md b/whats-new.md index cc672d32..d597cc4a 100644 --- a/whats-new.md +++ b/whats-new.md @@ -61,8 +61,8 @@ be squeezed out. # Thread recycling The threading system of libvips was revamped, the new implementation uses -[GLib's thread pool](https://developer.gnome.org/glib/stable/glib-Thread-Pools.html) -semantics, which is a single thread pool shared across all pipelines. This +the [thread pool semantics of GLib](https://developer.gnome.org/glib/stable/glib-Thread-Pools.html), +which is a single thread pool shared across all pipelines. This implementation allows the reuse of already started threads. This was originally intended for WebAssembly but it turned out to be useful From d601f22c20682a7eafcf5c57f263239061509f39 Mon Sep 17 00:00:00 2001 From: Kleis Auke Wolthuizen Date: Thu, 3 Jun 2021 15:50:06 +0200 Subject: [PATCH 3/4] + security notes --- whats-new.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/whats-new.md b/whats-new.md index d597cc4a..e488bafa 100644 --- a/whats-new.md +++ b/whats-new.md @@ -75,7 +75,7 @@ pipelines and long-running processes, a performance improvement can be observed. libvips now supports building OpenSlide, libheif, Poppler and {Image,Graphics}Magick as a dynamically loadable module. This makes it easier for distributions to provide separate (optional) packages for these dependencies, -making the core package much slimmer. +making the core package much slimmer and thus reducing the attack surface. [GModule](https://developer.gnome.org/glib/stable/glib-Dynamic-Loading-of-Modules.html) is used to accomplish this in a portable way. We already had a simple plugin system From 8d4f3ca74f960a8f9b7cfce0094961da920bb5b4 Mon Sep 17 00:00:00 2001 From: Kleis Auke Wolthuizen Date: Thu, 3 Jun 2021 16:54:20 +0200 Subject: [PATCH 4/4] + GPL/patents notes + {Image,Graphics}Magick -> libMagick --- whats-new.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/whats-new.md b/whats-new.md index e488bafa..9c31d596 100644 --- a/whats-new.md +++ b/whats-new.md @@ -72,14 +72,16 @@ pipelines and long-running processes, a performance improvement can be observed. # Loadable modules for some dependencies -libvips now supports building OpenSlide, libheif, Poppler and -{Image,Graphics}Magick as a dynamically loadable module. This makes it easier -for distributions to provide separate (optional) packages for these dependencies, -making the core package much slimmer and thus reducing the attack surface. +libvips now supports building OpenSlide, libheif, Poppler and libMagick as a +dynamically loadable module. This makes it easier for distributions to provide +separate (optional) packages for these dependencies, making the core package +much slimmer and thus reducing the attack surface. Distributing separate packages +could also help to comply with GPL licensing (“mere aggregation” clause) or +patent-encumbered software. [GModule](https://developer.gnome.org/glib/stable/glib-Dynamic-Loading-of-Modules.html) -is used to accomplish this in a portable way. We already had a simple plugin system -based on this, but the build part was not yet implemented. +is used to accomplish this in a portable way. We already had a simple plugin +system based on this, but the build part was not yet implemented. These loadable modules are built automatically when GModule is supported, which should be supported on at least Linux, Windows and macOS. It can be disabled