<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss version="2.0">

<channel>
	<title>ExcitingAds! Planet GNU</title>
	<link>https://planet.gnu.org/</link>
	<language>en</language>
	<description>Planet GNU!</description>


<xhtml:meta content="noindex" name="robots" xmlns:xhtml="http://www.w3.org/1999/xhtml"/><item>
	<title>automake @ Savannah: automake 1.20 released [stable]</title>
	<guid>https://savannah.gnu.org/news/?id=10962</guid>
	<link>https://savannah.gnu.org/news/?id=10962</link>
     <description>  &lt;p&gt;We are pleased to announce GNU Automake 1.20, a stable minor release.
&lt;br /&gt;

&lt;br /&gt;
Among new features is `--enable-jobserver' for compiler and linker access to GNU make's jobserver, the delete-on-error option, and a print-distfiles target.  distcheck no longer requires TeX by default. This release also fixes some long-standing bugs and limitations concerning dependency tracking, lex/yacc output in VPATH builds, Vala builds, distribution compression, and uninstall checks.  Furthermore, GNU automake has upgraded from the GNU GPLv2 (or later) license to the GNU GPL v3 (or later) license.
&lt;br /&gt;

&lt;br /&gt;
I have substantial plans for the GNU Build System (`autotools') as a whole.  I intend to continue resolving old issues and limitations, and adding new features in GNU Automake, slowly dragging it into the future.  My ultimate goal is to establish it, once again, as the build system of choice for new software projects while continuing to simplify maintenance and portability for existing users.  Hopefully, upcoming releases will get us closer and closer to this goal.
&lt;br /&gt;

&lt;br /&gt;
-*-*-*-
&lt;br /&gt;

&lt;br /&gt;
There have been 104 commits by 3 contributors in the 58 days
&lt;br /&gt;
since 1.19.
&lt;br /&gt;

&lt;br /&gt;
Thanks to everyone who contributed to this release!
&lt;br /&gt;

&lt;br /&gt;
  Kamila Szewczyk (99)
&lt;br /&gt;
  Karl Berry (4)
&lt;br /&gt;
  Paul Eggert (1)
&lt;br /&gt;

&lt;br /&gt;
Kamila Szewczyk (szewczyk@math.uni-sb.de)
&lt;br /&gt;
==================================================================
&lt;br /&gt;

&lt;br /&gt;
See below for the detailed list of changes since the
&lt;br /&gt;
previous version, as summarized by the NEWS file.
&lt;br /&gt;

&lt;br /&gt;
Here is the GNU Automake home page:
&lt;br /&gt;
  &lt;a href="https://www.gnu.org/software/automake/"&gt;https://www.gnu.o ... oftware/automake/&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Here are the compressed sources:
&lt;br /&gt;
  &lt;a href="https://ftp.gnu.org/gnu/automake/automake-1.20.tar.gz"&gt;https://ftp.gnu.o ... omake-1.20.tar.gz&lt;/a&gt; (2549281 bytes)
&lt;br /&gt;
  &lt;a href="https://ftp.gnu.org/gnu/automake/automake-1.20.tar.xz"&gt;https://ftp.gnu.o ... omake-1.20.tar.xz&lt;/a&gt; (1694140 bytes)
&lt;br /&gt;

&lt;br /&gt;
Here are the GPG detached signatures:
&lt;br /&gt;
  &lt;a href="https://ftp.gnu.org/gnu/automake/automake-1.20.tar.gz.sig"&gt;https://ftp.gnu.o ... e-1.20.tar.gz.sig&lt;/a&gt;
&lt;br /&gt;
  &lt;a href="https://ftp.gnu.org/gnu/automake/automake-1.20.tar.xz.sig"&gt;https://ftp.gnu.o ... e-1.20.tar.xz.sig&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Use a mirror for higher download bandwidth:
&lt;br /&gt;
  &lt;a href="https://www.gnu.org/order/ftp.html"&gt;https://www.gnu.o ... rg/order/ftp.html&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Here are the SHA256 and SHA3-256 checksums:
&lt;br /&gt;

&lt;br /&gt;
  File: automake-1.20.tar.gz
&lt;br /&gt;
  SHA256 sum: 00c0e397a3c0096b1b9167eb4a5ecb87a66fe50888d939c4e02111e603936570
&lt;br /&gt;
  SHA3-256 sum: 9144e4677e65c09ecc5de762e7b97982cfe683a4e45b153a199172b11593a03e
&lt;br /&gt;

&lt;br /&gt;
  File: automake-1.20.tar.xz
&lt;br /&gt;
  SHA256 sum: f6f34dad4cbe395715762b0710f7c511e39bd5cf777e6b95818ccbecf7714248
&lt;br /&gt;
  SHA3-256 sum: d5910039d860e26824074f654b1aea70d123932696d8fd0bcda531fc78652edf
&lt;br /&gt;

&lt;br /&gt;
Verify SHA256 with sha256sum or 'shasum -a 256'.
&lt;br /&gt;
Verify SHA3-256 with 'openssl dgst -sha3-256 FILE'.
&lt;br /&gt;

&lt;br /&gt;
Use a .sig file to verify that the corresponding file (without the
&lt;br /&gt;
.sig suffix) is intact. First, be sure to download both the .sig file
&lt;br /&gt;
and the corresponding tarball. Then, run a command like this:
&lt;br /&gt;

&lt;br /&gt;
  gpg --verify automake-1.20.tar.gz.sig automake-1.20.tar.gz
&lt;br /&gt;

&lt;br /&gt;
The signature should match the fingerprint of the following key:
&lt;br /&gt;

&lt;br /&gt;
  pub   rsa4096 2022-07-31 [C] [expires: 2036-05-11]
&lt;br /&gt;
        6C22 2EA6 B2BD 216A A406  516A C868 F0B6 DE38 409D
&lt;br /&gt;
  uid           [ultimate] Kamila Szewczyk &amp;lt;k@iczelia.net&amp;gt;
&lt;br /&gt;
  uid           [ultimate] Kamila Szewczyk &amp;lt;szewczyk@cs.uni-saarland.de&amp;gt;
&lt;br /&gt;
  uid           [ultimate] Kamila Szewczyk &amp;lt;iczelia@gnu.org&amp;gt;
&lt;br /&gt;
  uid           [ultimate] Kamila Szewczyk &amp;lt;szewczyk@math.uni-sb.de&amp;gt;
&lt;br /&gt;
  sub   rsa4096 2022-07-31 [E]
&lt;br /&gt;
  sub   ed25519 2026-06-29 [S]
&lt;br /&gt;

&lt;br /&gt;
If that command fails because you don't have the required public key,
&lt;br /&gt;
or that public key has expired, try the following command to retrieve
&lt;br /&gt;
or refresh it, and then rerun the 'gpg --verify' command.
&lt;br /&gt;

&lt;br /&gt;
  gpg --recv-keys 6C222EA6B2BD216AA406516AC868F0B6DE38409D
&lt;br /&gt;

&lt;br /&gt;
As a last resort to find the key, you can try the official GNU
&lt;br /&gt;
keyring:
&lt;br /&gt;

&lt;br /&gt;
  wget -q &lt;a href="https://ftp.gnu.org/gnu/gnu-keyring.gpg"&gt;https://ftp.gnu.o ... u/gnu-keyring.gpg&lt;/a&gt;
&lt;br /&gt;
  gpg --keyring ./gnu-keyring.gpg --verify automake-1.20.tar.gz.sig automake-1.20.tar.gz
&lt;br /&gt;

&lt;br /&gt;
Please report bugs and problems to &amp;lt;bug-automake@gnu.org&amp;gt; (instead of replying to this mail), and send general comments and feedback to &amp;lt;automake@gnu.org&amp;gt;, and patches to &amp;lt;automake-patches@gnu.org&amp;gt;.
&lt;br /&gt;

&lt;br /&gt;
Thanks to everyone who has reported problems, contributed
&lt;br /&gt;
patches, and helped test Automake!
&lt;br /&gt;

&lt;br /&gt;
Changes from NEWS:
&lt;br /&gt;

&lt;br /&gt;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
&lt;br /&gt;
New in 1.20 (2026-11-07):
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Licensing
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
  - Automake is now licensed under the GNU General Public License version 3
&lt;br /&gt;
    or later (GPLv3+), matching Autoconf and following the Free Software
&lt;br /&gt;
    Foundation's recommendation to use GPLv3 or later:
&lt;br /&gt;
      &lt;a href="https://www.gnu.org/software/autoconf/"&gt;https://www.gnu.o ... oftware/autoconf/&lt;/a&gt;
&lt;br /&gt;
      &lt;a href="https://www.gnu.org/licenses/license-recommendations.html"&gt;https://www.gnu.o ... ommendations.html&lt;/a&gt;
&lt;br /&gt;
      &lt;a href="https://www.gnu.org/licenses/rms-why-gplv3.html"&gt;https://www.gnu.o ... ms-why-gplv3.html&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
    Existing exceptions for distributed support files remain in place.
&lt;br /&gt;
    This does not change the licensing of generated Makefile.in files
&lt;br /&gt;
    or require packages using Automake to adopt the GPL.
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;New features added
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
  - New configure option --enable-jobserver lets compilers and linkers
&lt;br /&gt;
    inherit GNU make's pipe jobserver, for example for GCC's
&lt;br /&gt;
    -flto=jobserver.  Dry-run, question, and touch modes still do not
&lt;br /&gt;
    run these commands.  (&lt;i&gt;&lt;a href="https://savannah.gnu.org/bugs/?45756"&gt;bug #45756&lt;/a&gt;&lt;/i&gt;)
&lt;br /&gt;

&lt;br /&gt;
  - New option delete-on-error.  It emits the .DELETE_ON_ERROR special
&lt;br /&gt;
    target in the generated Makefile.in, instructing GNU make to delete
&lt;br /&gt;
    the target when its recipe fails after having modified it.  A failed
&lt;br /&gt;
    rule like `foo.h: gen.sh; ./gen.sh &amp;gt; $@' then no longer leaves a
&lt;br /&gt;
    truncated result that later runs of make treat as up to date.  Other
&lt;br /&gt;
    make programs do not support this, so the option will have no effect.
&lt;br /&gt;

&lt;br /&gt;
  - New target print-distfiles lists the files that "make dist" would
&lt;br /&gt;
    distribute.
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Source tree organization
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
  - Historical ChangeLogs, development plans, and NEWS-future are now
&lt;br /&gt;
    under attic/.  The experimental contrib/tap-driver.pl is retained
&lt;br /&gt;
    in attic/testing/; the maintained TAP driver is lib/tap-driver.sh.
&lt;br /&gt;
    The manual's link checker moved from contrib/ to maintainer/.
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Changes to Automake-generated Makefiles
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
  - distcheck no longer runs "make dvi" by default, so TeX is not needed
&lt;br /&gt;
    to check a distribution containing Texinfo manuals.  Set
&lt;br /&gt;
    AM_DISTCHECK_DVI_TARGET in Makefile.am to, e.g., dvi, pdf or html,
&lt;br /&gt;
    to check that the documentation can be built.  (&lt;i&gt;&lt;a href="https://savannah.gnu.org/bugs/?79053"&gt;bug #79053&lt;/a&gt;&lt;/i&gt;)
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bugs fixed
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
  - Repeated target declarations in overlapping Automake conditionals no
&lt;br /&gt;
    longer produce spurious redefinition warnings when adding prerequisites.
&lt;br /&gt;
    (&lt;i&gt;&lt;a href="https://savannah.gnu.org/bugs/?13940"&gt;bug #13940&lt;/a&gt;&lt;/i&gt;)
&lt;br /&gt;

&lt;br /&gt;
  - Dependencies on another target's objects in LIBADD or LDADD are now
&lt;br /&gt;
    tracked regardless of the order in which targets are processed.
&lt;br /&gt;
    (&lt;i&gt;&lt;a href="https://savannah.gnu.org/bugs/?60508"&gt;bug #60508&lt;/a&gt;&lt;/i&gt;)
&lt;br /&gt;

&lt;br /&gt;
  - distcheck now detects symbolic links left in the installation tree
&lt;br /&gt;
    after uninstall, including dangling links.
&lt;br /&gt;

&lt;br /&gt;
  - lex and yacc output files distributed from a VPATH build no longer carry
&lt;br /&gt;
    "#line" directives pointing to their sources through the build-time
&lt;br /&gt;
    srcdir, e.g. "../src/parse.y"; the distributed copies now refer to
&lt;br /&gt;
    the sources next to them.  (&lt;i&gt;&lt;a href="https://savannah.gnu.org/bugs/?39666"&gt;bug #39666&lt;/a&gt;&lt;/i&gt;)
&lt;br /&gt;

&lt;br /&gt;
  - dist-zstd now honors numeric ZSTD_CLEVEL values, such as 3, instead
&lt;br /&gt;
    of treating them as input filenames.  This fixes failed or incorrect
&lt;br /&gt;
    distribution archives when ZSTD_CLEVEL is set.
&lt;br /&gt;

&lt;br /&gt;
  - lex and yacc rules now create output directories before generating
&lt;br /&gt;
    sources, fixing out-of-tree builds with subdir-objects and
&lt;br /&gt;
    --disable-dependency-tracking.  (&lt;i&gt;&lt;a href="https://savannah.gnu.org/bugs/?27188"&gt;bug #27188&lt;/a&gt;&lt;/i&gt;, Debian &lt;i&gt;&lt;a href="https://savannah.gnu.org/bugs/?807050"&gt;bug #807050&lt;/a&gt;&lt;/i&gt;)
&lt;br /&gt;

&lt;br /&gt;
  - configure now refuses a source directory path containing '&amp;lt;', '&amp;gt;',
&lt;br /&gt;
    '(' or ')'.  These could be interpreted as shell redirections or
&lt;br /&gt;
    syntax in compiler commands, potentially overwriting files in the
&lt;br /&gt;
    build directory.
&lt;br /&gt;

&lt;br /&gt;
  - configure now refuses a source directory path ($srcdir) containing
&lt;br /&gt;
    ';' or '|', reporting "unsafe srcdir value", as it already did for
&lt;br /&gt;
    characters such as '$' and '&amp;amp;'.  Such a path used to fail later
&lt;br /&gt;
    with misleading errors, from config.status's dependency-tracking
&lt;br /&gt;
    setup or from make ("No rule to make target").  These characters
&lt;br /&gt;
    remain accepted when $srcdir is '.'.
&lt;br /&gt;

&lt;br /&gt;
  - Non-recursive Vala builds now pass distcheck when generated Vala
&lt;br /&gt;
    sources trigger recompilation in the build directory.  Generated C
&lt;br /&gt;
    files are moved into their subdirectories together, and build-tree
&lt;br /&gt;
    stamp files are removed by distclean.  (&lt;i&gt;&lt;a href="https://savannah.gnu.org/bugs/?76527"&gt;bug #76527&lt;/a&gt;&lt;/i&gt;)
&lt;br /&gt;

&lt;br /&gt;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
&lt;br /&gt;
This release is based on the Automake Git repository, available as:
&lt;br /&gt;

&lt;br /&gt;
  git clone &lt;a href="https://https.git.savannah.gnu.org/git/automake.git"&gt;https://https.git ... /git/automake.git&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Commit 5613ae2dbb151f73070bb576f21136e5ef5c75c1 is tagged as v1.20.
&lt;br /&gt;

&lt;br /&gt;
For a summary of changes and contributors, see:
&lt;br /&gt;
&lt;a href="https://gitweb.git.savannah.gnu.org/gitweb/?p=automake.git;a=shortlog;h=v1.20"&gt;https://gitweb.gi ... =shortlog;h=v1.20&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Or run this command from a Git checkout of Automake:
&lt;br /&gt;

&lt;br /&gt;
  git shortlog v1.19..v1.20
&lt;br /&gt;

&lt;br /&gt;
-- 
&lt;br /&gt;
With Valediction,
&lt;br /&gt;
Kamila Szewczyk (&lt;a href="https://iczelia.net"&gt;https:// ... elia.net&lt;/a&gt;)&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Sat, 07 Nov 2026 14:31:23 +0000</pubDate>

</item> 
<item>
	<title>FSF Blogs: Aaron Swartz's legacy lives on, but who profits from it?</title>
	<guid>http://www.fsf.org/blogs/community/aaron-swartzs-legacy-lives-on-but-who-profits-from-it</guid>
	<link>http://www.fsf.org/blogs/community/aaron-swartzs-legacy-lives-on-but-who-profits-from-it</link>
     <description>  November 8 is Aaron Swartz Day, when we remember a pioneer of free software and information sharing whose contributions helped shape the modern internet. </description> 
	<pubDate>Fri, 06 Nov 2026 22:28:30 +0000</pubDate>

</item> 
<item>
	<title>FSF Events: Free Software Directory meeting on IRC: Friday, November 20, starting at 12:00 EST (17:00 UTC)</title>
	<guid>http://www.fsf.org/events/fsd-2026-11-20-irc</guid>
	<link>http://www.fsf.org/events/fsd-2026-11-20-irc</link>
     <description>  Join the FSF and friends on Friday, November 20 from 12:00 to 15:00 EST (17:00 to 20:00 UTC) to help improve the Free Software Directory. </description> 
	<pubDate>Fri, 06 Nov 2026 14:40:35 +0000</pubDate>

</item> 
<item>
	<title>FSF Events: Free Software Directory meeting on IRC: Friday, November 13, starting at 12:00 EST (17:00 UTC)</title>
	<guid>http://www.fsf.org/events/fsd-2026-11-13-irc</guid>
	<link>http://www.fsf.org/events/fsd-2026-11-13-irc</link>
     <description>  Join the FSF and friends on Friday, November 13 from 12:00 to 15:00 EST (17:00 to 20:00 UTC) to help improve the Free Software Directory. </description> 
	<pubDate>Fri, 06 Nov 2026 14:24:43 +0000</pubDate>

</item> 
<item>
	<title>FSF Events: Cybersecurity &amp; machine learning: Preparing for an unpredictable future with Sean O’Brien and Mike Wilkes</title>
	<guid>http://www.fsf.org/events/afk/2026-11-13-hybrid-obrien-and-wilkes</guid>
	<link>http://www.fsf.org/events/afk/2026-11-13-hybrid-obrien-and-wilkes</link>
     <description>  November 13, 2026 at 13:30 EST. </description> 
	<pubDate>Fri, 06 Nov 2026 14:18:56 +0000</pubDate>

</item> 
<item>
	<title>hyperbole @ Savannah: GNU Hyperbole 9.3.2</title>
	<guid>https://savannah.gnu.org/news/?id=10961</guid>
	<link>https://savannah.gnu.org/news/?id=10961</link>
     <description>  &lt;p&gt;GNU Hyperbole 9.3.2 was released on the 27 October 2026.
&lt;br /&gt;

&lt;br /&gt;
Hyperbole is a broad information management framework that augments your favorite Emacs libraries like Org and Consult.  It can accelerate the things you do everyday with Emacs, just give it a chance.  It installs in about 60 seconds.  Learn about it from:
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.gnu.org/s/hyperbole/man/hyperbole.html#Hyperbole-Overview-1"&gt;Hyperbole Manual&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.gnu.org/s/hyperbole/#articles"&gt;Hyperbole Articles&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.gnu.org/s/hyperbole/#videos"&gt;Hyperbole Videos&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hyperbole version 9.3.2 is another jump in capability with Org visibility cycling added to the Koutliner and the ability to use the double brackets of Org link format around Hyperbole implicit buttons in Org mode.
&lt;br /&gt;

&lt;br /&gt;
Below are major updates since release 9.1.0:
&lt;br /&gt;
&lt;/p&gt;
&lt;h3&gt;The Koutliner - legal-style outliner with permalinks and hidden properties&lt;/h3&gt;
&lt;p&gt;See &lt;a href="https://www.gnu.org/s/hyperbole/man/hyperbole.html#Koutliner"&gt;www.gnu.org/s/hyp ... le.html#Koutliner&lt;/a&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;h4&gt;Org-style Visibility Cycling&lt;/h4&gt;
&lt;p&gt;New, extensive key compatibility with Org-mode; major Org keys work similarly.  {TAB} and {S-TAB} (previously {M-TAB}) keys cycle trees and entire outline visibility anywhere in a cell, by default. Use {C-c [} to toggle these keys between cycling and tree demotion/promotion, as desired.  Bindings of {C-c C-&amp;gt;} or {M-right} and {C-c C-&amp;lt;} or {M-left} for tree demotion/promotion always work regardless of the tab mode.
&lt;br /&gt;

&lt;br /&gt;
The Koutliner has the same kind of extensive user-customizations of tab behavior as Org mode.
&lt;br /&gt;

&lt;br /&gt;
See &lt;a href="https://www.gnu.org/s/hyperbole/man/hyperbole.html#TAB-and-Shift_002dTAB"&gt;www.gnu.org/s/hyp ... and-Shift_002dTAB&lt;/a&gt; for details on how these keys work and can be customized.
&lt;br /&gt;
&lt;/p&gt;
&lt;h4&gt; Inline Image Display&lt;/h4&gt;
&lt;p&gt;{C-c C-x C-v} toggles the inline display of image files in Koutlines, just like Org mode.
&lt;br /&gt;
&lt;/p&gt;
&lt;h4&gt;Free Up User-customizable {C-c &amp;lt;letter&amp;gt;} Keys&lt;/h4&gt;
&lt;p&gt;Previously, the Koutliner bound a number of these keys for convenience.  Now they are all replaced with {C-c ; &amp;lt;letter&amp;gt;} so global user set {C-c &amp;lt;letter&amp;gt;} keys are available.  If you don't use such global keys, {M-1 C-c C-l} will enable the original Koutliner {C-c &amp;lt;letter&amp;gt;} key bindings while leaving the {C-c ; &amp;lt;letter&amp;gt;} keys in place as well.
&lt;br /&gt;
&lt;/p&gt;
&lt;h4&gt;kotl-mode:action-key-default-function&lt;/h4&gt;
&lt;p&gt;This new setting holds a function run by the Action Key in Koutline mode (kotl-mode) when no other context matches.  The default setting does nothing within cells, whereas previously, it would toggle between showing and hiding the tree (this is now done with {TAB}).  Set this to &lt;i&gt;kotl-mode:show-or-hide-tree&lt;/i&gt; to restore the old Koutliner behavior.
&lt;br /&gt;
&lt;/p&gt;
&lt;h4&gt;kotl-mode:assist-key-default-function&lt;/h4&gt;
&lt;p&gt;This similar setting is for the Assist Key in Koutline mode when no other context matches.  The default setting does nothing within cells whereas previously it would run &lt;i&gt;smart-scroll-down&lt;/i&gt; to scroll down a screenful.  Set the variable to that command if you prefer the prior behavior.
&lt;br /&gt;
&lt;/p&gt;
&lt;h4&gt;Improve copy-tree Mnemonics&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;{C-c ; b} &lt;i&gt;kotl-mode:toggle-blank-lines&lt;/i&gt; has moved to {C-c ]}.
&lt;/li&gt;
&lt;li&gt;{C-c C-c} &lt;i&gt;kotl-mode:copy-before&lt;/i&gt; has moved to {C-c ; b} to match with {C-c ; c} &lt;i&gt;kotl-mode:copy-after&lt;/i&gt; binding.
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Hyperbole Org Mode Support See&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://www.gnu.org/s/hyperbole/man/hyperbole.html#Smart-Key-_002d-Org-Mode"&gt;www.gnu.org/s/hyp ... ey-_002d-Org-Mode&lt;/a&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;h4&gt;Hyperbole Buttons as Org Links&lt;/h4&gt;
&lt;p&gt;Hyperbole buttons wrapped in double square bracket org link delimiters when in Org mode will activate properly with the addition of a single line to your Hyperbole &lt;i&gt;use-package&lt;/i&gt; configuration:
&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;blockquote class="verbatim"&gt;&lt;p&gt;     (push #'hyperbole-activate-button org-open-link-functions)&lt;br /&gt;
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Then you get all the Hyperbole button capabilities with the highlighting and the activation of Org links via {C-c C-o}.  Of course, the Action Key will activate these buttons as well.
&lt;br /&gt;

&lt;br /&gt;
Since Emacs Lisp sybmols are Hyperbole buttons, you can make links to both function and variable definitons just by wrapping their names in Org delimiters.  For example, [[find-file]] or [[hsys-org-enable-smart-keys]].
&lt;br /&gt;
&lt;/p&gt;
&lt;h4&gt;Org Heading Smart Key Settings&lt;/h4&gt;
&lt;p&gt;Two new settings to control Action and Assist Key behavior when within an Org mode heading when &lt;i&gt;hsys-org-enable-smart-keys&lt;/i&gt; is set to t (defaults are no-ops):
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;smart-org-action-key-heading-function&lt;/i&gt; and
&lt;/li&gt;
&lt;li&gt;&lt;i&gt;smart-org-assist-key-heading-function&lt;/i&gt;.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The new &lt;i&gt;smart-org-cycle&lt;/i&gt; command is one option for such a setting.
&lt;br /&gt;
&lt;/p&gt;
&lt;h3&gt;HyWiki - the no markup, personal Wiki note taker&lt;/h3&gt;
&lt;p&gt;See &lt;a href="https://www.gnu.org/s/hyperbole/man/hyperbole.html#HyWiki"&gt;www.gnu.org/s/hyp ... rbole.html#HyWiki&lt;/a&gt;.
&lt;br /&gt;
&lt;/p&gt;
&lt;h4&gt;HyWikiWord#Headline Links to Indented Headlines&lt;/h4&gt;
&lt;p&gt;HyWikiWord#Headline links now work in Wiki pages that use indentation before the * delimiters of headlines.
&lt;br /&gt;
&lt;/p&gt;
&lt;h4&gt;Disable Action Key HyWikiWord Creation&lt;/h4&gt;
&lt;p&gt;You can now customize which modes prevent HyWikiWord creation with the Action Key {M-RET} Add any text or programming major modes to &lt;i&gt;hywiki-word-create-exclude-action-key-modes&lt;/i&gt; to disable this feature in these modes.  You can bypass this setting by creating a HyWikiWord via the keyboard menus with {C-h h h c}.
&lt;br /&gt;
&lt;/p&gt;
&lt;h4&gt;Orderless Matching in Searches&lt;/h4&gt;
&lt;p&gt;When using the &lt;i&gt;orderless&lt;/i&gt; package in searches, multiple space-separated words are matched in any order they occur, regardless of the order given to the search.
&lt;br /&gt;
&lt;/p&gt;
&lt;h3&gt;HyRolo - the fast, hierarchical record retriever&lt;/h3&gt;
&lt;p&gt;See &lt;a href="https://www.gnu.org/s/hyperbole/man/hyperbole.html#HyRolo"&gt;www.gnu.org/s/hyp ... rbole.html#HyRolo&lt;/a&gt;.
&lt;br /&gt;
&lt;/p&gt;
&lt;h4&gt;Yank Entire Record Trees&lt;/h4&gt;
&lt;p&gt;By default, {C-h h r y} &lt;i&gt;hyrolo-yank&lt;/i&gt; yanks at point the entry matched without any of its sub-entries.  Use {C-u C-h h r y} to yank in the entire tree.
&lt;br /&gt;
&lt;/p&gt;
&lt;h4&gt;Orderless Matching in Searches&lt;/h4&gt;
&lt;p&gt;When using the &lt;i&gt;orderless&lt;/i&gt; package in searches, multiple space-separated words are matched in any order they occur, regardless of the order given to the search.
&lt;br /&gt;
&lt;/p&gt;
&lt;h3&gt;Documentation&lt;/h3&gt;
&lt;h4&gt;"FAST-DEMO"&lt;/h4&gt;
&lt;p&gt;{C-h h d d} now includes links to articles about Hyperbole, including two new articles and videos:
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HyRolo: Records are Trees, Not Lines    - &lt;a href="https://youtu.be/5Oo_KqVcLFM"&gt;https://youtu ... e/5Oo_KqVcLFM&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Implicit Buttons: Build Your Hyperverse - &lt;a href="https://youtu.be/o2KMvSCXwlU"&gt;https://youtu ... e/o2KMvSCXwlU&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Installation&lt;/h3&gt;
&lt;p&gt;See &lt;a href="https://www.gnu.org/s/hyperbole/man/hyperbole.html#Install"&gt;www.gnu.org/s/hyp ... bole.html#Install&lt;/a&gt;.
&lt;br /&gt;
&lt;/p&gt;
&lt;h4&gt;New Install Documentation&lt;/h4&gt;
&lt;p&gt;Installation sections in the Hyperbole Manual and README.md have been extensively rewritten.  Installation now utilizes &lt;i&gt;use-package&lt;/i&gt; with a fully documented reference &lt;i&gt;man/use-package&lt;/i&gt; configuration file you can easily customize.  The file, "INSTALL", has been deleted.
&lt;br /&gt;
&lt;/p&gt;
&lt;h4&gt;Key Use-Package Settings&lt;/h4&gt;
&lt;p&gt;Some key configuration settings in the "man/use-package" file:
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;iimage-mode&lt;/i&gt; setting that permanently enables inline image display in Koutline buffers.
&lt;/li&gt;
&lt;li&gt;&lt;i&gt;hyrolo-file-list&lt;/i&gt; setting that shows all of the note taking systems that can be quickly full-text searched with HyRolo with no indexing.
&lt;/li&gt;
&lt;li&gt;The new &lt;i&gt;hywiki-word-create-exclude-action-key-modes&lt;/i&gt; list lets you exclude certain major-modes from having the Action Key create new HyWiki words when pressed on any capitalized word.
&lt;/li&gt;
&lt;li&gt;A one line setting of &lt;i&gt;org-open-link-functions&lt;/i&gt; enables highlighting Hyperbole buttons as Org links when wrapped in double square brackets.  Now you can make all your Hyperbole buttons operate like Org links if desired.
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Further Details&lt;/h3&gt;
&lt;p&gt;See &lt;a href="https://www.gnu.org/s/hyperbole/HY-NEWS.html"&gt;HY-NEWS&lt;/a&gt; for detailed changes in the Version 9 Hyperbole series.&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Thu, 05 Nov 2026 22:01:00 +0000</pubDate>

</item> 
<item>
	<title>hyperbole @ Savannah: GNU Hyperbole 9.3.1</title>
	<guid>https://savannah.gnu.org/news/?id=10960</guid>
	<link>https://savannah.gnu.org/news/?id=10960</link>
     <description>  &lt;p&gt;GNU Hyperbole 9.3.1 was released on the 22 October 2026.
&lt;br /&gt;

&lt;br /&gt;
Se announcement for GNU Hyperbole &lt;b&gt;version 9.3.2&lt;/b&gt; for a summary with major updates since release 9.1.0.&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Thu, 05 Nov 2026 21:15:45 +0000</pubDate>

</item> 
<item>
	<title>hyperbole @ Savannah: GNU Hyperbole 9.3.0</title>
	<guid>https://savannah.gnu.org/news/?id=10959</guid>
	<link>https://savannah.gnu.org/news/?id=10959</link>
     <description>  &lt;p&gt;GNU Hyperbole 9.3.0 was released on the 14 October 2026.
&lt;br /&gt;

&lt;br /&gt;
Se announcement for GNU Hyperbole &lt;b&gt;version 9.3.2&lt;/b&gt; for a summary with major updates since release 9.1.0.&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Thu, 05 Nov 2026 21:14:01 +0000</pubDate>

</item> 
<item>
	<title>hyperbole @ Savannah: GNU Hyperbole 9.2.0 (Koutliner Org-style visibility cycling release)</title>
	<guid>https://savannah.gnu.org/news/?id=10958</guid>
	<link>https://savannah.gnu.org/news/?id=10958</link>
     <description>  &lt;p&gt;We have added Org-style visibility cycling as an option to the Hyperbole Koutliner and have updated Hyperbole to &lt;b&gt;version 9.2.0&lt;/b&gt; (30 september 2026) to track this significant change.
&lt;br /&gt;

&lt;br /&gt;
Once you have it installed, remove your ~/EXAMPLE.kotl file if any.  Then use {C-h h k e} to get the new EXAMPLE.kotl copy to play with.  Use {C-TAB} in a Koutline to toggle between Org-like visibility cycling and Koutline's default demote/promote behavior.
&lt;br /&gt;

&lt;br /&gt;
Then {TAB} will cycle the view of the tree at point and {C-u TAB} will cycle the whole outline. Most of the complex behavior from the 'org-cycle' function is replicated.
&lt;br /&gt;

&lt;br /&gt;
See the new manual section, &lt;a href="https://www.gnu.org/software/hyperbole/man/hyperbole.html#Inserting-Literal-Tabs"&gt;(hyperbole)Inserting Literal Tabs&lt;/a&gt;, for how to configure the Koutliner for tab insertion in different contexts.&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Thu, 05 Nov 2026 20:51:25 +0000</pubDate>

</item> 
<item>
	<title>hyperbole @ Savannah: GNU Hyperbole Interim release 9.1.0</title>
	<guid>https://savannah.gnu.org/news/?id=10957</guid>
	<link>https://savannah.gnu.org/news/?id=10957</link>
     <description>  &lt;p&gt;This was an interim release (28 June 2026) to sync with the new package versioning techniques used by ELPA and MELPA. This turned what was the development version 9.0.2pre planned to be a 9.0.2 release into release 9.1.0 to resolve the numbering discrepancy.
&lt;br /&gt;

&lt;br /&gt;
From this release the following snapshot or devel versions are numbered RELEASE.0.DATE.COUNT.&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Thu, 05 Nov 2026 20:27:35 +0000</pubDate>

</item> 
<item>
	<title>automake @ Savannah: automake-1.19.94 released [alpha]</title>
	<guid>https://savannah.gnu.org/news/?id=10956</guid>
	<link>https://savannah.gnu.org/news/?id=10956</link>
     <description>  &lt;p&gt;This is to announce automake-1.19.94, a alpha release.
&lt;br /&gt;

&lt;br /&gt;
It is the second pre-release for the upcoming Automake 1.20.  Please consider doing us a favour and testing it on different platforms.
&lt;br /&gt;

&lt;br /&gt;
This release brings important bug-fixes that resolve some
&lt;br /&gt;
long-standing limitations and adds minor new features to automake.
&lt;br /&gt;

&lt;br /&gt;
There have been 95 commits by 3 people in the 8 weeks since 1.19.
&lt;br /&gt;

&lt;br /&gt;
See the NEWS below for a brief summary.
&lt;br /&gt;

&lt;br /&gt;
Thanks to everyone who has contributed!
&lt;br /&gt;
The following people contributed changes to this release:
&lt;br /&gt;

&lt;br /&gt;
  Kamila Szewczyk (90)
&lt;br /&gt;
  Karl Berry (4)
&lt;br /&gt;
  Paul Eggert (1)
&lt;br /&gt;

&lt;br /&gt;
Kamila
&lt;br /&gt;
 [on behalf of the automake maintainers]
&lt;br /&gt;
==================================================================
&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;
See below for the detailed list of changes since the
&lt;br /&gt;
previous version, as summarized by the NEWS file.
&lt;br /&gt;

&lt;br /&gt;
Download here:
&lt;br /&gt;

&lt;br /&gt;
  &lt;a href="https://alpha.gnu.org/gnu/automake/automake-1.19.94.tar.gz"&gt;https://alpha.gnu ... ke-1.19.94.tar.gz&lt;/a&gt;
&lt;br /&gt;
  &lt;a href="https://alpha.gnu.org/gnu/automake/automake-1.19.94.tar.xz"&gt;https://alpha.gnu ... ke-1.19.94.tar.xz&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Please report bugs and problems to &amp;lt;bug-automake@gnu.org&amp;gt;
&lt;br /&gt;
(instead of replying to this mail),
&lt;br /&gt;
and send general comments and feedback to &amp;lt;automake@gnu.org&amp;gt;,
&lt;br /&gt;
and patches to &amp;lt;automake-patches@gnu.org&amp;gt;.
&lt;br /&gt;

&lt;br /&gt;
Thanks to everyone who has reported problems, contributed
&lt;br /&gt;
patches, and helped test Automake!
&lt;br /&gt;

&lt;br /&gt;
-*-*-*-
&lt;br /&gt;

&lt;br /&gt;
If you install this test release in its own prefix (recommended)
&lt;br /&gt;
and you use libtool, you'll need to arrange for the libtool m4 files
&lt;br /&gt;
to be found by aclocal. For info on this, see:
&lt;br /&gt;
 
&lt;br /&gt;
&lt;a href="https://gnu.org/s/automake/manual/automake.html#Libtool-library-used-but-LIBTOOL-is-undefined"&gt;https://gnu.org/s ... TOOL-is-undefined&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
&lt;br /&gt;
New in 1.20 (????-??-??):
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Licensing
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
  - Automake is now licensed under the GNU General Public License version 3
&lt;br /&gt;
    or later (GPLv3+), matching Autoconf and following the Free Software
&lt;br /&gt;
    Foundation's recommendation to use GPLv3 or later:
&lt;br /&gt;
      &lt;a href="https://www.gnu.org/software/autoconf/"&gt;https://www.gnu.o ... oftware/autoconf/&lt;/a&gt;
&lt;br /&gt;
      &lt;a href="https://www.gnu.org/licenses/license-recommendations.html"&gt;https://www.gnu.o ... ommendations.html&lt;/a&gt;
&lt;br /&gt;
      &lt;a href="https://www.gnu.org/licenses/rms-why-gplv3.html"&gt;https://www.gnu.o ... ms-why-gplv3.html&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
    Existing exceptions for distributed support files remain in place.
&lt;br /&gt;
    This does not change the licensing of generated Makefile.in files
&lt;br /&gt;
    or require packages using Automake to adopt the GPL.
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;New features added
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
  - New configure option --enable-jobserver lets compilers and linkers
&lt;br /&gt;
    inherit GNU make's pipe jobserver, for example for GCC's
&lt;br /&gt;
    -flto=jobserver.  Dry-run, question, and touch modes still do not
&lt;br /&gt;
    run these commands.  (&lt;i&gt;&lt;a href="https://savannah.gnu.org/bugs/?45756"&gt;bug #45756&lt;/a&gt;&lt;/i&gt;)
&lt;br /&gt;

&lt;br /&gt;
  - New option delete-on-error.  It emits the .DELETE_ON_ERROR special
&lt;br /&gt;
    target in the generated Makefile.in, instructing GNU make to delete
&lt;br /&gt;
    the target when its recipe fails after having modified it.  A failed
&lt;br /&gt;
    rule like `foo.h: gen.sh; ./gen.sh &amp;gt; $@' then no longer leaves a
&lt;br /&gt;
    truncated result that later runs of make treat as up to date.  Other
&lt;br /&gt;
    make programs do not support this, so the option will have no effect.
&lt;br /&gt;

&lt;br /&gt;
  - New target print-distfiles lists the files that "make dist" would
&lt;br /&gt;
    distribute.
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Source tree organization
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
  - Historical ChangeLogs, development plans, and NEWS-future are now
&lt;br /&gt;
    under attic/.  The experimental contrib/tap-driver.pl is retained
&lt;br /&gt;
    in attic/testing/; the maintained TAP driver is lib/tap-driver.sh.
&lt;br /&gt;
    The manual's link checker moved from contrib/ to maintainer/.
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Changes to Automake-generated Makefiles
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
  - distcheck no longer runs "make dvi" by default, so TeX is not needed
&lt;br /&gt;
    to check a distribution containing Texinfo manuals.  Set
&lt;br /&gt;
    AM_DISTCHECK_DVI_TARGET in Makefile.am to, e.g., dvi, pdf or html,
&lt;br /&gt;
    to check that the documentation can be built.  (&lt;i&gt;&lt;a href="https://savannah.gnu.org/bugs/?79053"&gt;bug #79053&lt;/a&gt;&lt;/i&gt;)
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bugs fixed
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
  - Repeated target declarations in overlapping Automake conditionals no
&lt;br /&gt;
    longer produce spurious redefinition warnings when adding prerequisites.
&lt;br /&gt;
    (&lt;i&gt;&lt;a href="https://savannah.gnu.org/bugs/?13940"&gt;bug #13940&lt;/a&gt;&lt;/i&gt;)
&lt;br /&gt;

&lt;br /&gt;
  - Dependencies on another target's objects in LIBADD or LDADD are now
&lt;br /&gt;
    tracked regardless of the order in which targets are processed.
&lt;br /&gt;
    (&lt;i&gt;&lt;a href="https://savannah.gnu.org/bugs/?60508"&gt;bug #60508&lt;/a&gt;&lt;/i&gt;)
&lt;br /&gt;

&lt;br /&gt;
  - distcheck now detects symbolic links left in the installation tree
&lt;br /&gt;
    after uninstall, including dangling links.
&lt;br /&gt;

&lt;br /&gt;
  - lex and yacc output files distributed from a VPATH build no longer carry
&lt;br /&gt;
    "#line" directives pointing to their sources through the build-time
&lt;br /&gt;
    srcdir, e.g. "../src/parse.y"; the distributed copies now refer to
&lt;br /&gt;
    the sources next to them.  (&lt;i&gt;&lt;a href="https://savannah.gnu.org/bugs/?39666"&gt;bug #39666&lt;/a&gt;&lt;/i&gt;)
&lt;br /&gt;

&lt;br /&gt;
  - dist-zstd now honors numeric ZSTD_CLEVEL values, such as 3, instead
&lt;br /&gt;
    of treating them as input filenames.  This fixes failed or incorrect
&lt;br /&gt;
    distribution archives when ZSTD_CLEVEL is set.
&lt;br /&gt;

&lt;br /&gt;
  - lex and yacc rules now create output directories before generating
&lt;br /&gt;
    sources, fixing out-of-tree builds with subdir-objects and
&lt;br /&gt;
    --disable-dependency-tracking.  (&lt;i&gt;&lt;a href="https://savannah.gnu.org/bugs/?27188"&gt;bug #27188&lt;/a&gt;&lt;/i&gt;, Debian &lt;i&gt;&lt;a href="https://savannah.gnu.org/bugs/?807050"&gt;bug #807050&lt;/a&gt;&lt;/i&gt;)
&lt;br /&gt;

&lt;br /&gt;
  - configure now refuses a source directory path containing '&amp;lt;', '&amp;gt;',
&lt;br /&gt;
    '(' or ')'.  These could be interpreted as shell redirections or
&lt;br /&gt;
    syntax in compiler commands, potentially overwriting files in the
&lt;br /&gt;
    build directory.
&lt;br /&gt;

&lt;br /&gt;
  - configure now refuses a source directory path ($srcdir) containing
&lt;br /&gt;
    ';' or '|', reporting "unsafe srcdir value", as it already did for
&lt;br /&gt;
    characters such as '$' and '&amp;amp;'.  Such a path used to fail later
&lt;br /&gt;
    with misleading errors, from config.status's dependency-tracking
&lt;br /&gt;
    setup or from make ("No rule to make target").  These characters
&lt;br /&gt;
    remain accepted when $srcdir is '.'.
&lt;br /&gt;

&lt;br /&gt;
  - Non-recursive Vala builds now pass distcheck when generated Vala
&lt;br /&gt;
    sources trigger recompilation in the build directory.  Generated C
&lt;br /&gt;
    files are moved into their subdirectories together, and build-tree
&lt;br /&gt;
    stamp files are removed by distclean.  (&lt;i&gt;&lt;a href="https://savannah.gnu.org/bugs/?76527"&gt;bug #76527&lt;/a&gt;&lt;/i&gt;)
&lt;br /&gt;

&lt;br /&gt;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
&lt;br /&gt;

&lt;br /&gt;
Here is the GNU automake home page:
&lt;br /&gt;
    &lt;a href="https://gnu.org/s/automake/"&gt;https://gnu. ... /s/automake/&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Here are the compressed sources:
&lt;br /&gt;
  &lt;a href="https://alpha.gnu.org/gnu/automake/automake-1.19.94.tar.gz"&gt;https://alpha.gnu ... ke-1.19.94.tar.gz&lt;/a&gt;   (2.5MB)
&lt;br /&gt;
  &lt;a href="https://alpha.gnu.org/gnu/automake/automake-1.19.94.tar.xz"&gt;https://alpha.gnu ... ke-1.19.94.tar.xz&lt;/a&gt;   (1.7MB)
&lt;br /&gt;

&lt;br /&gt;
Here are the GPG detached signatures:
&lt;br /&gt;
  &lt;a href="https://alpha.gnu.org/gnu/automake/automake-1.19.94.tar.gz.sig"&gt;https://alpha.gnu ... .19.94.tar.gz.sig&lt;/a&gt;
&lt;br /&gt;
  &lt;a href="https://alpha.gnu.org/gnu/automake/automake-1.19.94.tar.xz.sig"&gt;https://alpha.gnu ... .19.94.tar.xz.sig&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Use a mirror for higher download bandwidth:
&lt;br /&gt;
  &lt;a href="https://www.gnu.org/order/ftp.html"&gt;https://www.gnu.o ... rg/order/ftp.html&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Here are the SHA256 and SHA3-256 checksums:
&lt;br /&gt;

&lt;br /&gt;
  File: automake-1.19.94.tar.gz
&lt;br /&gt;
  SHA256 sum: b550d1eab9a5881949aff503ef50056c5c2f04f527c5f00ca2fb7d52acfe9f92
&lt;br /&gt;
  SHA3-256 sum: d89c81e5b9e75fcef15a91d138b6f95209e6ff10eb9ef6b5b2142220bc6b7d19
&lt;br /&gt;

&lt;br /&gt;
  File: automake-1.19.94.tar.xz
&lt;br /&gt;
  SHA256 sum: db6b4a816c086eb51b537c87ad1990b1a640de11df02a87c0df656d72dae255c
&lt;br /&gt;
  SHA3-256 sum: 863782e6b1d32052e2556c18a154022d38a984a6f2c8200ebeb7250ff38eda4b
&lt;br /&gt;

&lt;br /&gt;
Verify the SHA256 checksum with either sha256sum, sha256, or
&lt;br /&gt;
'shasum -a 256'.
&lt;br /&gt;

&lt;br /&gt;
Verify the SHA3-256 checksum with 'cksum -a sha3 -l 256'
&lt;br /&gt;
from coreutils-9.8.
&lt;br /&gt;

&lt;br /&gt;
Use a .sig file to verify that the corresponding file (without the
&lt;br /&gt;
.sig suffix) is intact.  First, be sure to download both the .sig file
&lt;br /&gt;
and the corresponding tarball.  Then, run a command like this:
&lt;br /&gt;

&lt;br /&gt;
  gpg --verify automake-1.19.94.tar.gz.sig automake-1.19.94.tar.gz
&lt;br /&gt;

&lt;br /&gt;
The signature should match the fingerprint of the following key:
&lt;br /&gt;

&lt;br /&gt;
  pub   rsa4096 2022-07-31 [C]
&lt;br /&gt;
        6C22 2EA6 B2BD 216A A406  516A C868 F0B6 DE38 409D
&lt;br /&gt;
  uid   Kamila Szewczyk &amp;lt;k@iczelia.net&amp;gt;
&lt;br /&gt;
  uid   Kamila Szewczyk &amp;lt;szewczyk@cs.uni-saarland.de&amp;gt;
&lt;br /&gt;
  uid   Kamila Szewczyk &amp;lt;iczelia@gnu.org&amp;gt;
&lt;br /&gt;
  uid   Kamila Szewczyk &amp;lt;szewczyk@math.uni-sb.de&amp;gt;
&lt;br /&gt;

&lt;br /&gt;
If that command fails because you don't have the required public key,
&lt;br /&gt;
or that public key has expired, try the following commands to retrieve
&lt;br /&gt;
or refresh it, and then rerun the 'gpg --verify' command.
&lt;br /&gt;

&lt;br /&gt;
  gpg --recv-keys 6C222EA6B2BD216AA406516AC868F0B6DE38409D
&lt;br /&gt;

&lt;br /&gt;
As a last resort to find the key, you can try the official GNU
&lt;br /&gt;
keyring:
&lt;br /&gt;

&lt;br /&gt;
  wget -q &lt;a href="https://ftp.gnu.org/gnu/gnu-keyring.gpg"&gt;https://ftp.gnu.o ... u/gnu-keyring.gpg&lt;/a&gt;
&lt;br /&gt;
  gpg --keyring gnu-keyring.gpg --verify automake-1.19.94.tar.gz.sig automake-1.19.94.tar.gz
&lt;br /&gt;

&lt;br /&gt;
This release is based on the automake git repository, available as
&lt;br /&gt;

&lt;br /&gt;
  git clone &lt;a href="https://https.git.savannah.gnu.org/git/automake.git"&gt;https://https.git ... /git/automake.git&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
with commit 69b6c65e706ad089f076ebaf8b84fca4170c6cce tagged as v1.19.94.
&lt;br /&gt;

&lt;br /&gt;
For a summary of changes and contributors, see:
&lt;br /&gt;

&lt;br /&gt;
 
&lt;br /&gt;
&lt;a href="https://gitweb.git.savannah.gnu.org/gitweb/?p=automake.git;a=shortlog;h=v1.19.94"&gt;https://gitweb.gi ... ortlog;h=v1.19.94&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
or run this command from a git-cloned automake directory:
&lt;br /&gt;

&lt;br /&gt;
  git shortlog v1.19..v1.19.94
&lt;br /&gt;

&lt;br /&gt;
-- 
&lt;br /&gt;
With Valediction,
&lt;br /&gt;
Kamila Szewczyk (&lt;a href="https://iczelia.net"&gt;https:// ... elia.net&lt;/a&gt;)&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Thu, 05 Nov 2026 00:58:59 +0000</pubDate>

</item> 
<item>
	<title>FSF Events: Free Software Directory meeting on IRC: Friday, November 6, starting at 12:00 EST (17:00 UTC)</title>
	<guid>http://www.fsf.org/events/fsd-2026-11-06-irc</guid>
	<link>http://www.fsf.org/events/fsd-2026-11-06-irc</link>
     <description>  Join the FSF and friends on Friday, November 6 from 12:00 to 15:00 EST (17:00 to 20:00 UTC) to help improve the Free Software Directory. </description> 
	<pubDate>Tue, 03 Nov 2026 21:35:23 +0000</pubDate>

</item> 
<item>
	<title>FSF Blogs: October GNU Spotlight with Amin Bandali featuring fifteen new GNU releases: Hyperbole, Gxmessage, and more!</title>
	<guid>http://www.fsf.org/blogs/community/2026-october-gnu-spotlight</guid>
	<link>http://www.fsf.org/blogs/community/2026-october-gnu-spotlight</link>
    
	<pubDate>Mon, 02 Nov 2026 19:13:02 +0000</pubDate>

</item> 
<item>
	<title>automake @ Savannah: automake-1.19.92 released [beta]</title>
	<guid>https://savannah.gnu.org/news/?id=10954</guid>
	<link>https://savannah.gnu.org/news/?id=10954</link>
     <description>  &lt;p&gt;This is to announce automake-1.19.92, a alpha release.
&lt;br /&gt;

&lt;br /&gt;
It is the first (and hopefully final) pre-release for the upcoming
&lt;br /&gt;
Automake 1.20.  Please consider doing us a favour and testing it
&lt;br /&gt;
on different platforms.
&lt;br /&gt;

&lt;br /&gt;
This release brings important bug-fixes that resolve some
&lt;br /&gt;
long-standing limitations and adds minor new features to automake.
&lt;br /&gt;

&lt;br /&gt;
There have been 80 commits by 3 people in the 49 days since 1.19.
&lt;br /&gt;

&lt;br /&gt;
See the NEWS below for a brief summary.
&lt;br /&gt;

&lt;br /&gt;
Thanks to everyone who has contributed!
&lt;br /&gt;
The following people contributed changes to this release:
&lt;br /&gt;

&lt;br /&gt;
  Kamila Szewczyk (75)
&lt;br /&gt;
  Karl Berry (4)
&lt;br /&gt;
  Paul Eggert (1)
&lt;br /&gt;

&lt;br /&gt;
Kamila Szewczyk (szewczyk@math.uni-sb.de)
&lt;br /&gt;
 [on behalf of the automake maintainers]
&lt;br /&gt;
==================================================================
&lt;br /&gt;

&lt;br /&gt;
Download here:
&lt;br /&gt;

&lt;br /&gt;
  &lt;a href="https://alpha.gnu.org/gnu/automake/automake-1.19.92.tar.gz"&gt;https://alpha.gnu ... ke-1.19.92.tar.gz&lt;/a&gt;
&lt;br /&gt;
  &lt;a href="https://alpha.gnu.org/gnu/automake/automake-1.19.92.tar.xz"&gt;https://alpha.gnu ... ke-1.19.92.tar.xz&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Please report bugs and problems to &amp;lt;bug-automake@gnu.org&amp;gt;
&lt;br /&gt;
(instead of replying to this mail),
&lt;br /&gt;
and send general comments and feedback to &amp;lt;automake@gnu.org&amp;gt;,
&lt;br /&gt;
and patches to &amp;lt;automake-patches@gnu.org&amp;gt;.
&lt;br /&gt;

&lt;br /&gt;
Thanks to everyone who has reported problems, contributed
&lt;br /&gt;
patches, and helped test Automake!
&lt;br /&gt;

&lt;br /&gt;
-*-*-*-
&lt;br /&gt;

&lt;br /&gt;
If you install this test release in its own prefix (recommended)
&lt;br /&gt;
and you use libtool, you'll need to arrange for the libtool m4 files
&lt;br /&gt;
to be found by aclocal. For info on this, see:
&lt;br /&gt;
 
&lt;br /&gt;
&lt;a href="https://gnu.org/s/automake/manual/automake.html#Libtool-library-used-but-LIBTOOL-is-undefined"&gt;https://gnu.org/s ... TOOL-is-undefined&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
For planned incompatibilities in a possible future Automake 2.0 release,
&lt;br /&gt;
please see NEWS-future and start following the advice there now.
&lt;br /&gt;

&lt;br /&gt;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
&lt;br /&gt;
New in 1.19.2 (2026-10-28):
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;New features added
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
  - New configure option --enable-jobserver lets compilers and linkers
&lt;br /&gt;
    inherit GNU make's pipe jobserver, for example for GCC's
&lt;br /&gt;
    -flto=jobserver.  Dry-run, question, and touch modes still do not
&lt;br /&gt;
    run these commands.  (&lt;i&gt;&lt;a href="https://savannah.gnu.org/bugs/?45756"&gt;bug #45756&lt;/a&gt;&lt;/i&gt;)
&lt;br /&gt;

&lt;br /&gt;
  - New option delete-on-error.  It emits the .DELETE_ON_ERROR special
&lt;br /&gt;
    target in the generated Makefile.in, instructing GNU make to delete
&lt;br /&gt;
    the target when its recipe fails after having modified it.  A failed
&lt;br /&gt;
    rule like `foo.h: gen.sh; ./gen.sh &amp;gt; $@' then no longer leaves a
&lt;br /&gt;
    truncated result that later runs of make treat as up to date.  Other
&lt;br /&gt;
    make programs do not support this, so the option will have no effect.
&lt;br /&gt;

&lt;br /&gt;
  - New target print-distfiles lists the files that "make dist" would
&lt;br /&gt;
    distribute.
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Changes to Automake-generated Makefiles
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
  - distcheck no longer runs "make dvi" by default, so TeX is not needed
&lt;br /&gt;
    to check a distribution containing Texinfo manuals.  Set
&lt;br /&gt;
    AM_DISTCHECK_DVI_TARGET in Makefile.am to, e.g., dvi, pdf or html,
&lt;br /&gt;
    to check that the documentation can be built.  (&lt;i&gt;&lt;a href="https://savannah.gnu.org/bugs/?79053"&gt;bug #79053&lt;/a&gt;&lt;/i&gt;)
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bugs fixed
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
  - Repeated target declarations in overlapping Automake conditionals no
&lt;br /&gt;
    longer produce spurious redefinition warnings when adding prerequisites.
&lt;br /&gt;
    (&lt;i&gt;&lt;a href="https://savannah.gnu.org/bugs/?13940"&gt;bug #13940&lt;/a&gt;&lt;/i&gt;)
&lt;br /&gt;

&lt;br /&gt;
  - Dependencies on another target's objects in LIBADD or LDADD are now
&lt;br /&gt;
    tracked regardless of the order in which targets are processed.
&lt;br /&gt;
    (&lt;i&gt;&lt;a href="https://savannah.gnu.org/bugs/?60508"&gt;bug #60508&lt;/a&gt;&lt;/i&gt;)
&lt;br /&gt;

&lt;br /&gt;
  - distcheck now detects symbolic links left in the installation tree
&lt;br /&gt;
    after uninstall, including dangling links.
&lt;br /&gt;

&lt;br /&gt;
  - lex and yacc output files distributed from a VPATH build no longer carry
&lt;br /&gt;
    "#line" directives pointing to their sources through the build-time
&lt;br /&gt;
    srcdir, e.g. "../src/parse.y"; the distributed copies now refer to
&lt;br /&gt;
    the sources next to them.  (&lt;i&gt;&lt;a href="https://savannah.gnu.org/bugs/?39666"&gt;bug #39666&lt;/a&gt;&lt;/i&gt;)
&lt;br /&gt;

&lt;br /&gt;
  - dist-zstd now honors numeric ZSTD_CLEVEL values, such as 3, instead
&lt;br /&gt;
    of treating them as input filenames.  This fixes failed or incorrect
&lt;br /&gt;
    distribution archives when ZSTD_CLEVEL is set.
&lt;br /&gt;

&lt;br /&gt;
  - lex and yacc rules now create output directories before generating
&lt;br /&gt;
    sources, fixing out-of-tree builds with subdir-objects and
&lt;br /&gt;
    --disable-dependency-tracking.  (&lt;i&gt;&lt;a href="https://savannah.gnu.org/bugs/?27188"&gt;bug #27188&lt;/a&gt;&lt;/i&gt;, Debian &lt;i&gt;&lt;a href="https://savannah.gnu.org/bugs/?807050"&gt;bug #807050&lt;/a&gt;&lt;/i&gt;)
&lt;br /&gt;

&lt;br /&gt;
  - configure now refuses a source directory path containing '&amp;lt;', '&amp;gt;',
&lt;br /&gt;
    '(' or ')'.  These could be interpreted as shell redirections or
&lt;br /&gt;
    syntax in compiler commands, potentially overwriting files in the
&lt;br /&gt;
    build directory.
&lt;br /&gt;

&lt;br /&gt;
  - configure now refuses a source directory path ($srcdir) containing
&lt;br /&gt;
    ';' or '|', reporting "unsafe srcdir value", as it already did for
&lt;br /&gt;
    characters such as '$' and '&amp;amp;'.  Such a path used to fail later
&lt;br /&gt;
    with misleading errors, from config.status's dependency-tracking
&lt;br /&gt;
    setup or from make ("No rule to make target").  These characters
&lt;br /&gt;
    remain accepted when $srcdir is '.'.
&lt;br /&gt;

&lt;br /&gt;
  - Non-recursive Vala builds now pass distcheck when generated Vala
&lt;br /&gt;
    sources trigger recompilation in the build directory.  Generated C
&lt;br /&gt;
    files are moved into their subdirectories together, and build-tree
&lt;br /&gt;
    stamp files are removed by distclean.  (&lt;i&gt;&lt;a href="https://savannah.gnu.org/bugs/?76527"&gt;bug #76527&lt;/a&gt;&lt;/i&gt;)
&lt;br /&gt;

&lt;br /&gt;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
&lt;br /&gt;

&lt;br /&gt;
Here is the GNU automake home page:
&lt;br /&gt;
    &lt;a href="https://gnu.org/s/automake/"&gt;https://gnu. ... /s/automake/&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Here are the compressed sources:
&lt;br /&gt;
  &lt;a href="https://alpha.gnu.org/gnu/automake/automake-1.19.92.tar.gz"&gt;https://alpha.gnu ... ke-1.19.92.tar.gz&lt;/a&gt;   (2.5MB)
&lt;br /&gt;
  &lt;a href="https://alpha.gnu.org/gnu/automake/automake-1.19.92.tar.xz"&gt;https://alpha.gnu ... ke-1.19.92.tar.xz&lt;/a&gt;   (1.7MB)
&lt;br /&gt;

&lt;br /&gt;
Here are the GPG detached signatures:
&lt;br /&gt;
  &lt;a href="https://alpha.gnu.org/gnu/automake/automake-1.19.92.tar.gz.sig"&gt;https://alpha.gnu ... .19.92.tar.gz.sig&lt;/a&gt;
&lt;br /&gt;
  &lt;a href="https://alpha.gnu.org/gnu/automake/automake-1.19.92.tar.xz.sig"&gt;https://alpha.gnu ... .19.92.tar.xz.sig&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Use a mirror for higher download bandwidth:
&lt;br /&gt;
  &lt;a href="https://www.gnu.org/order/ftp.html"&gt;https://www.gnu.o ... rg/order/ftp.html&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Here are the SHA256 and SHA3-256 checksums:
&lt;br /&gt;

&lt;br /&gt;
  File: automake-1.19.92.tar.gz
&lt;br /&gt;
  SHA256 sum: 8f766f5f78d98f81ce30446cab79caf2d9b514f32821e2c466c846a22f971b68
&lt;br /&gt;
  SHA3-256 sum: 4445cde757b16c43ec389461d2bab9f99562586ab07a4a0cf506e3450e1eb576
&lt;br /&gt;

&lt;br /&gt;
  File: automake-1.19.92.tar.xz
&lt;br /&gt;
  SHA256 sum: 3e338607daf027546f2040439578176feab6ee8efab83dc9a9a9680884ff1fb5
&lt;br /&gt;
  SHA3-256 sum: 84348e4b626558f1aacecde044400131fbdcbbde74fe447a338427b580d4174d
&lt;br /&gt;

&lt;br /&gt;
Verify the SHA256 checksum with either sha256sum, sha256, or
&lt;br /&gt;
'shasum -a 256'.
&lt;br /&gt;

&lt;br /&gt;
Verify the SHA3-256 checksum with 'cksum -a sha3 -l 256'
&lt;br /&gt;
from coreutils-9.8.
&lt;br /&gt;

&lt;br /&gt;
Use a .sig file to verify that the corresponding file (without the
&lt;br /&gt;
.sig suffix) is intact.  First, be sure to download both the .sig file
&lt;br /&gt;
and the corresponding tarball.  Then, run a command like this:
&lt;br /&gt;

&lt;br /&gt;
  gpg --verify automake-1.19.92.tar.gz.sig automake-1.19.92.tar.gz
&lt;br /&gt;

&lt;br /&gt;
The signature should match the fingerprint of the following key:
&lt;br /&gt;

&lt;br /&gt;
  pub   rsa4096 2022-07-31 [C]
&lt;br /&gt;
        6C22 2EA6 B2BD 216A A406  516A C868 F0B6 DE38 409D
&lt;br /&gt;
  uid   Kamila Szewczyk &amp;lt;k@iczelia.net&amp;gt;
&lt;br /&gt;
  uid   Kamila Szewczyk &amp;lt;szewczyk@cs.uni-saarland.de&amp;gt;
&lt;br /&gt;
  uid   Kamila Szewczyk &amp;lt;iczelia@gnu.org&amp;gt;
&lt;br /&gt;
  uid   Kamila Szewczyk &amp;lt;szewczyk@math.uni-sb.de&amp;gt;
&lt;br /&gt;

&lt;br /&gt;
If that command fails because you don't have the required public key,
&lt;br /&gt;
or that public key has expired, try the following commands to retrieve
&lt;br /&gt;
or refresh it, and then rerun the 'gpg --verify' command.
&lt;br /&gt;

&lt;br /&gt;
  gpg --recv-keys 6C222EA6B2BD216AA406516AC868F0B6DE38409D
&lt;br /&gt;

&lt;br /&gt;
As a last resort to find the key, you can try the official GNU
&lt;br /&gt;
keyring:
&lt;br /&gt;

&lt;br /&gt;
  wget -q &lt;a href="https://ftp.gnu.org/gnu/gnu-keyring.gpg"&gt;https://ftp.gnu.o ... u/gnu-keyring.gpg&lt;/a&gt;
&lt;br /&gt;
  gpg --keyring gnu-keyring.gpg --verify automake-1.19.92.tar.gz.sig automake-1.19.92.tar.gz
&lt;br /&gt;

&lt;br /&gt;
This release is based on the automake git repository, available as
&lt;br /&gt;

&lt;br /&gt;
  git clone &lt;a href="https://https.git.savannah.gnu.org/git/automake.git"&gt;https://https.git ... /git/automake.git&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
with commit f6104d007b721055edec9c689fdc9c397623600a tagged as v1.19.92.
&lt;br /&gt;

&lt;br /&gt;
For a summary of changes and contributors, see:
&lt;br /&gt;

&lt;br /&gt;
 
&lt;br /&gt;
&lt;a href="https://gitweb.git.savannah.gnu.org/gitweb/?p=automake.git;a=shortlog;h=v1.19.92"&gt;https://gitweb.gi ... ortlog;h=v1.19.92&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
or run this command from a git-cloned automake directory:
&lt;br /&gt;

&lt;br /&gt;
  git shortlog v1.19..v1.19.92
&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;
-- 
&lt;br /&gt;
With Valediction,
&lt;br /&gt;
Kamila Szewczyk (&lt;a href="https://iczelia.net"&gt;https:// ... elia.net&lt;/a&gt;)&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Sat, 31 Oct 2026 16:39:48 +0000</pubDate>

</item> 
<item>
	<title>FSF Blogs: Bruce Schneier on why encryption is important</title>
	<guid>http://www.fsf.org/blogs/community/bruce-schneier-on-why-encryption-is-important</guid>
	<link>http://www.fsf.org/blogs/community/bruce-schneier-on-why-encryption-is-important</link>
    
	<pubDate>Fri, 30 Oct 2026 21:25:00 +0000</pubDate>

</item> 
<item>
	<title>parallel @ Savannah: GNU Parallel 20261022 ('Lycée') released [stable]</title>
	<guid>https://savannah.gnu.org/news/?id=10953</guid>
	<link>https://savannah.gnu.org/news/?id=10953</link>
     <description>  &lt;p&gt;GNU Parallel 20261022 ('Lycée') has been released. It is available for download at: lbry://@GnuParallel:4
&lt;br /&gt;

&lt;br /&gt;
Quote of the month:
&lt;br /&gt;

&lt;br /&gt;
  gnu parallel is amazing
&lt;br /&gt;
    -- Tarun Agarwal @axrawal
&lt;br /&gt;

&lt;br /&gt;
New in this release:
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bug fixes and man page updates.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;

&lt;br /&gt;
GNU Parallel - For people who live life in the parallel lane.
&lt;br /&gt;

&lt;br /&gt;
If you like GNU Parallel record a video testimonial: Say who you are, what you use GNU Parallel for, how it helps you, and what you like most about it. Include a command that uses GNU Parallel if you feel like it.
&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;h2&gt;About GNU Parallel&lt;/h2&gt;
&lt;p&gt;
&lt;br /&gt;
GNU Parallel is a shell tool for executing jobs in parallel using one or more computers. A job can be a single command or a small script that has to be run for each of the lines in the input. The typical input is a list of files, a list of hosts, a list of users, a list of URLs, or a list of tables. A job can also be a command that reads from a pipe. GNU Parallel can then split the input and pipe it into commands in parallel.
&lt;br /&gt;

&lt;br /&gt;
If you use xargs and tee today you will find GNU Parallel very easy to use as GNU Parallel is written to have the same options as xargs. If you write loops in shell, you will find GNU Parallel may be able to replace most of the loops and make them run faster by running several jobs in parallel. GNU Parallel can even replace nested loops.
&lt;br /&gt;

&lt;br /&gt;
GNU Parallel makes sure output from the commands is the same output as you would get had you run the commands sequentially. This makes it possible to use output from GNU Parallel as input for other programs.
&lt;br /&gt;

&lt;br /&gt;
For example you can run this to convert all jpeg files into png and gif files and have a progress bar:
&lt;br /&gt;

&lt;br /&gt;
  parallel --bar convert {1} {1.}.{2} ::: *.jpg ::: png gif
&lt;br /&gt;

&lt;br /&gt;
Or you can generate big, medium, and small thumbnails of all jpeg files in sub dirs:
&lt;br /&gt;

&lt;br /&gt;
  find . -name '*.jpg' |
&lt;br /&gt;
    parallel convert -geometry {2} {1} {1//}/thumb{2}_{1/} :::: - ::: 50 100 200
&lt;br /&gt;

&lt;br /&gt;
You can find more about GNU Parallel at: &lt;a href="http://www.gnu.org/s/parallel/"&gt;http://www.gnu ... rg/s/parallel/&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
You can install GNU Parallel in just 10 seconds with:
&lt;br /&gt;

&lt;br /&gt;
    $ (wget -O - pi.dk/3 || lynx -source pi.dk/3 || curl pi.dk/3/ || \
&lt;br /&gt;
       fetch -o - &lt;a href="http://pi.dk/3"&gt;http://pi.dk/3&lt;/a&gt; ) &amp;gt; install.sh
&lt;br /&gt;
    $ sha1sum install.sh | grep c555f616391c6f7c28bf938044f4ec50
&lt;br /&gt;
    12345678 c555f616 391c6f7c 28bf9380 44f4ec50
&lt;br /&gt;
    $ md5sum install.sh | grep 707275363428aa9e9a136b9a7296dfe4
&lt;br /&gt;
    70727536 3428aa9e 9a136b9a 7296dfe4
&lt;br /&gt;
    $ sha512sum install.sh | grep b24bfe249695e0236f6bc7de85828fe1f08f4259
&lt;br /&gt;
    83320d89 f56698ec 77454856 895edc3e aa16feab 2757966e 5092ef2d 661b8b45
&lt;br /&gt;
    b24bfe24 9695e023 6f6bc7de 85828fe1 f08f4259 6ce5480a 5e1571b2 8b722f21
&lt;br /&gt;
    $ bash install.sh
&lt;br /&gt;

&lt;br /&gt;
Watch the intro video on &lt;a href="http://www.youtube.com/playlist?list=PL284C9FF2488BC6D1"&gt;http://www.youtub ... L284C9FF2488BC6D1&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Walk through the tutorial (man parallel_tutorial). Your command line will love you for it.
&lt;br /&gt;

&lt;br /&gt;
When using programs that use GNU Parallel to process data for publication please cite:
&lt;br /&gt;

&lt;br /&gt;
O. Tange (2018): GNU Parallel 2018, March 2018, &lt;a href="https://doi.org/10.5281/zenodo.1146014"&gt;https://doi.org/1 ... 81/zenodo.1146014&lt;/a&gt;.
&lt;br /&gt;

&lt;br /&gt;
If you like GNU Parallel:
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Give a demo at your local user group/team/colleagues
&lt;/li&gt;
&lt;li&gt;Post the intro videos on Reddit/Diaspora*/forums/blogs/ Identi.ca/Google+/Twitter/Facebook/Linkedin/mailing lists
&lt;/li&gt;
&lt;li&gt;Get the merchandise &lt;a href="https://gnuparallel.threadless.com/designs/gnu-parallel"&gt;https://gnuparall ... igns/gnu-parallel&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Request or write a review for your favourite blog or magazine
&lt;/li&gt;
&lt;li&gt;Request or build a package for your favourite distribution (if it is not already there)
&lt;/li&gt;
&lt;li&gt;Invite me for your next conference
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
If you use programs that use GNU Parallel for research:
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Please cite GNU Parallel in you publications (use --citation)
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
If GNU Parallel saves you money:
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;(Have your company) donate to FSF &lt;a href="https://my.fsf.org/donate/"&gt;https://my.f ... .org/donate/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;h2&gt;About GNU SQL&lt;/h2&gt;
&lt;p&gt;
&lt;br /&gt;
GNU sql aims to give a simple, unified interface for accessing databases through all the different databases' command line clients. So far the focus has been on giving a common way to specify login information (protocol, username, password, hostname, and port number), size (database and table size), and running queries.
&lt;br /&gt;

&lt;br /&gt;
The database is addressed using a DBURL. If commands are left out you will get that database's interactive shell.
&lt;br /&gt;

&lt;br /&gt;
When using GNU SQL for a publication please cite:
&lt;br /&gt;

&lt;br /&gt;
O. Tange (2011): GNU SQL - A Command Line Tool for Accessing Different Databases Using DBURLs, ;login: The USENIX Magazine, April 2011:29-32.
&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;h2&gt;About GNU Niceload&lt;/h2&gt;
&lt;p&gt;
&lt;br /&gt;
GNU niceload slows down a program when the computer load average (or other system activity) is above a certain limit. When the limit is reached the program will be suspended for some time. If the limit is a soft limit the program will be allowed to run for short amounts of time before being suspended again. If the limit is a hard limit the program will only be allowed to run when the system is below the limit.&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Wed, 28 Oct 2026 20:56:50 +0000</pubDate>

</item> 
<item>
	<title>gxmessage @ Savannah: gxmessage 4.1.1 for GTK4 released</title>
	<guid>https://savannah.gnu.org/news/?id=10952</guid>
	<link>https://savannah.gnu.org/news/?id=10952</link>
     <description>  &lt;p&gt;gxmessage is a GTK based alternative to xmessage.
&lt;br /&gt;

&lt;br /&gt;
Version 4.1.0 is a long overdue initial port from GTK3 to GTK4.
&lt;br /&gt;
It also includes a new search feature (Ctrl-F).
&lt;br /&gt;

&lt;br /&gt;
Version 4.1.1 is a post-port tidy-up.
&lt;br /&gt;
It adds a new desktop icon and improves automatic window sizing.&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Sun, 25 Oct 2026 01:51:25 +0000</pubDate>

</item> 
<item>
	<title>Amin Bandali: Living healthier</title>
	<guid>tag:shemshak.org,2019:~amin/rss20.xml:living-healthier</guid>
	<link>https://www.shemshak.org/~amin/living-healthier.html</link>
     <description>  &lt;p&gt;Earlier this week I had a coaching session with
&lt;a href="https://protesilaos.com"&gt;Protesilaos&lt;/a&gt;, where we focused
on health and wellness.  I took some notes during our call, which
I expand on here, and share with Prot's permission.  I've been paying
more serious attention to my health this year, and our discussion was
in the context of me striving to live a healthier life.  These
notes are shared in the hope of being useful and &lt;em&gt;are not&lt;/em&gt;
professional advice; for medical advice please consult a licensed
physician.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Update 24 October 2026:&lt;/b&gt; Prot published a note about our
discussion on his website: &lt;a href="https://protesilaos.com/commentary/2026-10-24-healthier-lifestyle-amin-bandali/"&gt;Healthier lifestyle with Amin Bandali&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;b&gt;Exercise&lt;/b&gt;

&lt;p&gt;Life in today's fast-paced world can feel busier than ever, where
every day is packed with a myriad of activities and tasks that need to
be done, or tempting distractions that pop up seemingly randomly, with
hardly a moment to spare.  Despite that, or perhaps &lt;em&gt;because&lt;/em&gt;
of that, it's worthwhile to make time for ourselves and the various
aspects of our health.

&lt;/p&gt;&lt;p&gt;As embodied souls, our bodies condition our minds.  We take care of
our body so we can take care of our mind.  As humans we evolved for an
active lifestyle out of survival necessity.  In today's society many
of us have sedentary office jobs that involve sitting for long periods
of time.  It's especially important that we try and make time for some
regular physical activity like exercising and resistance training,
to help build and retain muscle mass and mobility as we age.
Fitness does not have to be the end goal that takes over our life,
though there is nothing wrong with that if fitness &lt;em&gt;is&lt;/em&gt; one's
central goal e.g. as a personal trainer.  Rather, for someone like me
with other primary goals, my reason to exercise is to help live
a healthier life, so I could spend quality time with my loved ones
and carry out my responsibilities with a healthy body and mind.&lt;/p&gt;

&lt;p&gt;Prot mentioned that our health is directly dependent on the
following four factors:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what we eat;&lt;/li&gt;
&lt;li&gt;what we drink;&lt;/li&gt;
&lt;li&gt;what we breathe; and&lt;/li&gt;
&lt;li&gt;what we think.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thus compromising any of these - for example, eating greasy food
or drinking alcohol - would undermine the gains from exercising.&lt;/p&gt;

&lt;p&gt;While pursuing fitness, it's important to have &lt;em&gt;sustained&lt;/em&gt;
effort so that the body remains active and the mind is not distracted,
and equally important to have &lt;em&gt;sustainable&lt;/em&gt; effort so that we
don't suffer injuries and not make the pursuit of fitness burdensome
financially.&lt;/p&gt;

&lt;p&gt;Calisthenics is a key part of the strength training activities Prot
practices, in addition to the physically intensive work he does on his
land.&lt;/p&gt;

&lt;blockquote cite="https://en.wikipedia.org/w/index.php?title=Calisthenics&amp;amp;oldid=1381467992"&gt;&lt;p&gt;Calisthenics [...] is a form of strength training that utilizes
an individual's body weight as resistance to perform multi-joint,
compound movements with little or no equipment.  Calisthenics are
popular for their convenience, as they require little to no equipment
and can be performed anywhere.&lt;/p&gt;
&lt;p&gt;— &lt;a href="https://en.wikipedia.org/w/index.php?title=Calisthenics&amp;amp;oldid=1381467992"&gt;&lt;cite&gt;Calisthenics, Wikipedia&lt;/cite&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Calisthenics can be done progressively, starting small
and building in intensity and duration over time.  It is also
economically/financially sustainable.  These calisthenic exercises
are a good starting point (barring existing injuries in the related
areas):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;push-ups - easier version: at an angle or against the wall;&lt;/li&gt;
&lt;li&gt;pull-ups - easier version: at an angle e.g. using door frame;&lt;/li&gt;
&lt;li&gt;squats - easier version: don't squat all the way down; and&lt;/li&gt;
&lt;li&gt;sit-ups.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Aim to perform each exercise in 3 sets of 10 repetitions, but
it's perfectly okay to start with fewer and gradually build up.  The
exercises should be done around the same time everyday, so that there
is enough time for the muscles to rest and recover for the next day.
Doing them at night then again the next morning, for instance, would
be too short of a time period and not enough for the body to recover.
It's also vital to get enough sleep each night to make sure the body
can properly rest and be energized the next day.&lt;/p&gt;

&lt;b&gt;Food&lt;/b&gt;

&lt;p&gt;As mentioned earlier, it's crucial to pair exercise with a healthy
diet.  I found Prot's programming metaphor for food interesting:
similar to how it takes more time and effort for us to process and
understand complex source code, breaking down and processing complex
foods is similarly more difficult for the body.  Prot does not eat
fried food, and recommends avoiding sauces as much as possible:
greasy, salty, and creamy extras make food more irresistible.
They tend to make one want to eat more than what the body needs,
and are to be avoided in isolation but especially in combination.
In keeping ingredients close to their natural states, not overdoing
things, and not eating more than the body needs, Prot &lt;a href="https://protesilaos.com/commentary/2025-09-17-re-how-do-you-do-food/"&gt;extends his philosophy of simplicity and moderation to
cooking&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In addition to eating healthy meals, we need to apply similar
consideration to snacks: avoiding overly salty or sugary snacks,
and choosing healthier ones.  Nuts can make great snacks in small
quantities, especially almonds and walnuts, if one's not allergic.&lt;/p&gt;

&lt;p&gt;In addition to the inherent healthiness of the food or snack,
Prot also suggests paying attention to methods of preparation.
For instance, regarding concentration or distillation: juices,
even when freshly squeezed from fruits, might have more of the
fruits' sugar than its pulp and other beneficial parts.
Additionally, chewing triggers biological responses in our body
which for example can reduce stress, and release satiety hormones
to help avoid overeating.  So, Prot suggests to just eat the fruits
themselves.&lt;/p&gt;

&lt;p&gt;Regarding weight loss, it will occur naturally as we introduce
exercise into our routine, and pay closer attention to what we eat and
drink.  It's important to lose the weight slowly to condition our body
to the new reality as it changes.  Shortcuts tend to either not work,
or have negative consequences.  By going through the process slowly
and with regularity, we gradually retrain our muscle memories and
adjust our habits so we can maintain the lower weight and the
healthier lifestyle.  Regularity is key: it's better do a little
everyday, than do a lot on only two days.  It helps us develop the
attitude that the exercise is part of our regular effort that we do
consistently all the time.&lt;/p&gt;

&lt;p&gt;Working on wellness and living healthier is a matter of
moderation, and building capacity over time.  I will give it
the time and attention it needs, without rushing, and enjoy
the journey to becoming a healthier version of myself.&lt;/p&gt;

&lt;p&gt;Take care, and so long for now.&lt;/p&gt; </description> 
	<pubDate>Sat, 24 Oct 2026 21:01:08 +0000</pubDate>

</item> 
<item>
	<title>pspp @ Savannah: PSPP 2.1.3 has been released.</title>
	<guid>https://savannah.gnu.org/news/?id=10951</guid>
	<link>https://savannah.gnu.org/news/?id=10951</link>
     <description>  &lt;p&gt;I'm very pleased to announce the release of a new version of GNU PSPP.  PSPP is a program for statistical analysis of sampled data.  It is a free replacement for the proprietary program SPSS.
&lt;br /&gt;

&lt;br /&gt;
Changes from 2.1.2 to 2.1.3:
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bug fixes.
&lt;/li&gt;
&lt;li&gt;MATRIX: New MEAN and COV extension functions.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Please send PSPP bug reports to bug-gnu-pspp@gnu.org.&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Fri, 23 Oct 2026 17:01:44 +0000</pubDate>

</item> 
<item>
	<title>FSF Blogs: Election integrity requires free software</title>
	<guid>http://www.fsf.org/blogs/community/2026-election-integrity-requires-free-software</guid>
	<link>http://www.fsf.org/blogs/community/2026-election-integrity-requires-free-software</link>
    
	<pubDate>Thu, 22 Oct 2026 20:55:00 +0000</pubDate>

</item> 
<item>
	<title>nano @ Savannah: GNU nano 9.3 was released</title>
	<guid>https://savannah.gnu.org/news/?id=10949</guid>
	<link>https://savannah.gnu.org/news/?id=10949</link>
     <description>  &lt;p&gt;Version 6.0 brought option --zero, for hiding all interface elements.  Version 7.0 brought braced function names, to make string binds more readable and stable and versatile.  Version 8.0 changed Ctrl+F to mean "forward search", like in most other programs, and added option --modernbindings for making most bindings like in other programs.  Version 9.0 brought horizontal scrolling of the viewport.  Along the way many small issues were fixed and little improvements made.&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Thu, 22 Oct 2026 09:04:06 +0000</pubDate>

</item> 
<item>
	<title>GNU Taler news: Taler Operations AG is getting ready to operate Taler in Germany</title>
	<guid>https://taler.net/en/news/2026-13.html</guid>
	<link>https://taler.net/en/news/2026-13.html</link>
     <description>  &lt;article&gt;
             This post explains why this company is needed, what changed in the NGI TALER consortium, and how citizens who want to see Taler succeed can help, including as investors.
           &lt;/article&gt; </description> 
	<pubDate>Mon, 19 Oct 2026 22:00:00 +0000</pubDate>

</item> 
<item>
	<title>libunistring @ Savannah: GNU libunistring-1.5 released</title>
	<guid>https://savannah.gnu.org/news/?id=10947</guid>
	<link>https://savannah.gnu.org/news/?id=10947</link>
     <description>  &lt;p&gt;Download from &lt;a href="https://ftp.gnu.org/gnu/libunistring/libunistring-1.5.tar.gz"&gt;https://ftp.gnu.o ... string-1.5.tar.gz&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
This is a stable release.
&lt;br /&gt;

&lt;br /&gt;
New in this release:
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The data tables and algorithms have been updated to Unicode version 18.0.0.
&lt;/li&gt;
&lt;/ul&gt; </description> 
	<pubDate>Sat, 17 Oct 2026 22:16:41 +0000</pubDate>

</item> 
<item>
	<title>www-zh-cn @ Savannah: Welcome our new member - Richard Qin</title>
	<guid>https://savannah.gnu.org/news/?id=10946</guid>
	<link>https://savannah.gnu.org/news/?id=10946</link>
     <description>  &lt;p&gt;Hi, All:
&lt;br /&gt;

&lt;br /&gt;
Please join me in welcoming our new member:
&lt;br /&gt;

&lt;br /&gt;
User Details:
&lt;br /&gt;
-------------
&lt;br /&gt;
Name: Richard Qin
&lt;br /&gt;
Login: richardqin
&lt;br /&gt;
Email: &lt;a href="mailto:richard.qin.x@gmail.com"&gt;richard.qin.x@gmail.com&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
I wish Richard Qin a wonderful journey in GNU CTT.
&lt;br /&gt;

&lt;br /&gt;
Happy Hacking
&lt;br /&gt;
wxie&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Mon, 12 Oct 2026 06:30:59 +0000</pubDate>

</item> 
<item>
	<title>FSF Blogs: Raspberry Pi puts digital handcuffs on RAM upgrades</title>
	<guid>http://www.fsf.org/blogs/community/2026-raspberry-pi</guid>
	<link>http://www.fsf.org/blogs/community/2026-raspberry-pi</link>
    
	<pubDate>Fri, 09 Oct 2026 16:30:00 +0000</pubDate>

</item> 
<item>
	<title>GNU Guix: Extending Guix</title>
	<guid>https://guix.gnu.org/blog/2026/extending-guix//</guid>
	<link>https://guix.gnu.org/blog/2026/extending-guix//</link>
     <description>  &lt;p&gt;Guix is all about empowering people, so it should come as no surprise that &lt;a href="https://guix.gnu.org/manual/devel/en/html_node/Extending-Guix.html"&gt;one
can extend it with new &lt;code&gt;guix&lt;/code&gt;
commands&lt;/a&gt;. You
can show the commands available in your current Guix through the help command:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-shell"&gt;$ guix help&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you are using a recent Guix, there are a number of extensions at your
disposal, they are available as individual packages, and as &lt;a href="https://packages.guix.gnu.org/packages/guix-extension-collection"&gt;a meta-package
providing a collection of
extensions&lt;/a&gt;. Try
them out with:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-shell"&gt;$ guix shell guix guile guix-extension-collection&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&lt;p&gt;I'm adding the &lt;code&gt;guix&lt;/code&gt; and &lt;code&gt;guile&lt;/code&gt; packages to the shell because we want the
different Guile and Guix search paths to be adjusted in the shell. To know
more about why this is needed, read &lt;a href="https://guix.gnu.org/manual/devel/en/html_node/Search-Paths.html"&gt;Search
Paths&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;You will notice that the help menu has been extended with information about the
available extensions:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-shell"&gt;$ guix help

...

  extension commands
    explore   interactively explore a Guix System configuration
    removals  keep up to date with package removals
    compose   docker compose compatibility layer
    toys      Explore packages and services through REST API
    xsearch   search for packages using a fast Xapian cache

...&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Since this blog post is called "Extending Guix", let's write an extension, shall
we?&lt;/p&gt;&lt;h1&gt;How does Guix locate extensions?&lt;/h1&gt;&lt;p&gt;Guix locates extensions by looking up
&lt;code&gt;GUIX_EXTENSIONS_PATH&lt;/code&gt;. &lt;a href="https://codeberg.org/guix/guix/commit/de069958fcf9050be92a4085c31b9738ca4ff912"&gt;Recently&lt;/a&gt;
Guix has introduced a new way of writing extensions. The old way would search
extensions under &lt;code&gt;/path/to/guix/extensions&lt;/code&gt; and the extensions modules would be
named &lt;code&gt;(guix extensions NAME)&lt;/code&gt;. The new schema expects extensions to be under
&lt;code&gt;/path/to/SCHEMA_VERSION&lt;/code&gt;; the name of the module will still be &lt;code&gt;(guix extensions NAME)&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;The advantage of this new schema is the Guix can treat the extension module as a
standard Guile module, meaning that the runtime is able to find the compiled
&lt;code&gt;.go&lt;/code&gt; file of the extension. The old schema was relaying on runtime evaluation;
the load machinery was not handling compiled files. This has a considerable
improvement on performance, so you are encouraged to update any old extension to
the new schema.&lt;/p&gt;&lt;h1&gt;Writing an extension&lt;/h1&gt;&lt;p&gt;Enough introductions, let's write a basic extension.&lt;/p&gt;&lt;p&gt;The first step is to create the project structure. Remember that the extension
machinery expects modules to be named &lt;code&gt;(guix extensions NAME)&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;We start by creating, in our project root, the directories for the extension.&lt;/p&gt;&lt;pre&gt;&lt;code class="language-shell"&gt;$ mkdir -p guix/extensions&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now, we create the file &lt;code&gt;guix/extensions/hello.scm&lt;/code&gt; with the following contents:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;(define-module (guix extensions hello))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A blank canvas...&lt;/p&gt;&lt;p&gt;We import &lt;code&gt;(guix scripts)&lt;/code&gt; to get the &lt;code&gt;define-command&lt;/code&gt; macro. We declare it and
export it so the extension machinery can find the command in the public
interface of the module.&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;(define-module (guix extensions hello)
  #:use-module (guix scripts)
  #:export (guix-hello))

(define-command (guix-hello . args)
  (category extension)
  (synopsis "say hello")
  (display "hello, I'm a Guix extension!\n"))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;With this, we already have a working Guix extension. We can run the extension
like this from the root of the project.&lt;/p&gt;&lt;pre&gt;&lt;code class="language-shell"&gt;$ GUIX_EXTENSIONS_PATH=$PWD guix hello
hello, I'm a Guix extension!&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Since we would like our extension to be discoverable by users, we will add a
help message which will make the extension display in the &lt;code&gt;guix help&lt;/code&gt; menu.&lt;/p&gt;&lt;p&gt;We will use &lt;code&gt;(srfi srfi-37)&lt;/code&gt; to write the option parser, and &lt;code&gt;(guix ui)&lt;/code&gt; for the
internationalized strings; you will see that I import these modules when I show
you the complete extension. Let's focus on the option definitions:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;(define (show-help)
  (display (G_ "Usage: guix hello\n"))
  (display (G_ "Just say hello, it's not that complicated.\n"))
  (display (G_ "
      --help             display this message"))
  (newline))

(define %options
  (list (option '(#\h "help") #f #f
                (lambda args
                  (leave-on-EPIPE (show-help))
                  (exit 0)))))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Since we are only handling the arguments for showing the help message, we just
need to call the parser at the start of the command:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;(define-command (guix-hello . args)
  (category extension)
  (synopsis "say hello")
  (parse-command-line args %options (list '()))
  (display "hello, I'm a Guix extension!\n"))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here you have the complete extension module:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;(define-module (guix extensions hello)
  #:use-module (guix scripts)
  #:use-module (guix ui)
  #:use-module (srfi srfi-37)
  #:export (guix-hello))

(define (show-help)
  (display (G_ "Usage: guix hello\n"))
  (display (G_ "Just say hello, it's not that complicated.\n"))
  (display (G_ "
      --help             display this message"))
  (newline))

(define %options
  (list (option '(#\h "help") #f #f
                (lambda args
                  (leave-on-EPIPE (show-help))
                  (exit 0)))))

(define-command (guix-hello . args)
  (category extension)
  (synopsis "say hello")
  (parse-command-line args %options (list '()))
  (display "hello, I'm a Guix extension!\n"))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;With that, our extension will be present when we ask Guix for help:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-shell"&gt;$ GUIX_EXTENSIONS_PATH=$PWD guix help

...

  extension commands
    hello  say hello&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;It also takes a &lt;code&gt;--help&lt;/code&gt; flag:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-shell"&gt;$ GUIX_EXTENSIONS_PATH=$PWD guix hello --help
Usage: guix hello
Just say hello, it's not that complicated.

      --help             display this message&lt;/code&gt;&lt;/pre&gt;&lt;h1&gt;Packaging a Guix extension&lt;/h1&gt;&lt;p&gt;At the time of writing, we don't have a dedicated &lt;a href="https://guix.gnu.org/manual/devel/en/html_node/Build-Systems.html"&gt;Guix
build-system&lt;/a&gt;
for extensions. Fortunately, the
&lt;a href="https://guix.gnu.org/manual/devel/en/html_node/Build-Systems.html#index-guile_002dbuild_002dsystem"&gt;&lt;code&gt;guile-build-system&lt;/code&gt;&lt;/a&gt;
is close enough for this use case.&lt;/p&gt;&lt;p&gt;Let's make a package definition for our new hello extension that uses our local
sources. Create a &lt;code&gt;guix.scm&lt;/code&gt; file at the root of the project with the following
contents:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;(use-modules (gnu packages package-management)
             (guix build-system guile)
             (guix gexp)
             (guix git-download)
             (guix packages)
             ((guix licenses) #:prefix license:))

(define vcs-file?
  ;; Return true if the given file is under version control.
  (or
   (git-predicate
    (dirname (canonicalize-path
              (assq-ref (current-source-location) 'filename))))
   (const #t)))

(define-public guix-hello
  (package
    (name "guix-hello")
    (version "0.0.0-git")
    (source (local-file (assume-valid-file-name ".")
                        "pin-checkout"
                        #:recursive? #t
                        #:select? vcs-file?))
    (build-system guile-build-system)
    (arguments
     (list
      #:scheme-file-regexp
      #~(lambda (file stat)
          (and ((file-name-predicate #$default-scheme-file-regexp)
                file stat)
               (not ((file-name-predicate "^(guix|channels|manifest)\\.scm$")
                     file stat))))
      #:phases
      #~(modify-phases %standard-phases
          (add-after 'build 'move-to-extension-directory
            (lambda _
              (with-directory-excursion #$output
                (mkdir-p "share/guix/extensions/1.5/guix/extensions")
                (rename-file (string-append "share/guile/site/"
                                            (target-guile-effective-version)
                                            "/guix/extensions/hello.scm")
                             "share/guix/extensions/1.5/guix/extensions/hello.scm")))))))
    (native-inputs (list guix))
    (inputs (list (lookup-package-input guix "guile")))
    (home-page "https://codeberg.org/guix-extensions")
    (synopsis "Make Guix say hello")
    (description
     "This extension provides the @command{guix hello} command,
which makes Guix say hello.")
    (license license:gpl3+)))

guix-hello&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We can test this new extension like this:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-shell"&gt;$ guix shell -CW -f guix.scm -- guix hello&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The flags passed to &lt;code&gt;guix shell&lt;/code&gt; are the following:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;-C&lt;/code&gt; (&lt;code&gt;--container&lt;/code&gt;): To prevent your environment from interfering.&lt;/li&gt;&lt;li&gt;&lt;code&gt;-W&lt;/code&gt; (&lt;code&gt;--nesting&lt;/code&gt;): To bring the current Guix you are using into the
container so it can load the extension.&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;&lt;p&gt;Since this example is using the new extension scheme, the &lt;code&gt;guix&lt;/code&gt; command you
are running must be at or newer than commit
&lt;a href="https://codeberg.org/guix/guix/commit/de069958fcf9050be92a4085c31b9738ca4ff912"&gt;de069958fc&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;h1&gt;Closing words&lt;/h1&gt;&lt;p&gt;I hope you find this small introduction to Guix extensions useful and that you
start to write your own Guix extensions.&lt;/p&gt;&lt;p&gt;I would like to encourage everyone reading this to submit their extensions to
the &lt;a href="https://codeberg.org/guix-extensions"&gt;guix-extensions&lt;/a&gt; Codeberg
organization. The idea is to make this organization a central hub for everyone
to participate in the development of useful extensions for the community.&lt;/p&gt; </description> 
	<pubDate>Thu, 08 Oct 2026 11:00:00 +0000</pubDate>

</item> 
<item>
	<title>health @ Savannah: GNU Health as a solution for Europe digital change - Italy Digi-CHange conf</title>
	<guid>https://savannah.gnu.org/news/?id=10944</guid>
	<link>https://savannah.gnu.org/news/?id=10944</link>
     <description>  &lt;p&gt;During the days 6-9 of October will take place the Digi-Change conference in Turin, Piedmont region, Italy.
&lt;br /&gt;

&lt;br /&gt;
Digi-CHange promotes the digital transformation of medical and nursing education, introducing an inter-professional model that connects educators, clinicians, engineers, and industry innovators. Aligned with the Erasmus+ Capacity Building in Higher Education priority of Digital Transformation, Digi-Change strengthens the capacity of universities in Georgia, Ukraine, and EU partner countries to modernize curricula and foster digital competencies for a sustainable, innovation-ready healthcare workforce.
&lt;br /&gt;

&lt;br /&gt;
In the first session, Luis Falcón will deliver a keynote presentation about the social impact of GNU Health and Libre/Free Software is having in the public healthcare system, and how it can be used in the context of Telemedicine to provide meaningful and timely healthcare access to remote areas in Europe. Other topics will be building large federated health networks, privacy, and the human factor in healthcare, medical genetics and precision medicine. Dr. Falcon will address the risks of some emerging technology (eg, LLM) poses at different levels (individual, clinical practice, cultural &amp;amp; scientific community and the environment), and ethical alternatives in eHealth and decision support (DSS)
&lt;br /&gt;

&lt;br /&gt;
During this three-day “train-the-trainers” conference, physicians, nurses and other health professionals from Ukraine, Georgia and Latvia will join colleagues from Italy, France, Austria and other European countries to exchange knowledge and experiences.
&lt;br /&gt;

&lt;br /&gt;
In the topic of Telemedicine, Alberto Lazzero will address National records and cross-border cooperation among France and Italy. Prof. Dr. Alberto Lazzero is the Head of Telemedicine, Hospital of Briançon (France). He is an specialist in telemedicine for patients in mountain and cross‑border areas.
&lt;br /&gt;

&lt;br /&gt;
The conference will be in Turin, onsite, and will count with experts on diagnostic imaging, cancer and bioinformatics, among others. There will be visits to the Istituto Neurologico “Carlo Besta” (Milan) and INOC (National Oncologic Institute Candiolo).
&lt;br /&gt;

&lt;br /&gt;
Looking forward to meet our colleagues from Europe in Italy and share the experiences and impact of Free/Libre software in healthcare and our society.
&lt;br /&gt;

&lt;br /&gt;
Original post:
&lt;br /&gt;

&lt;br /&gt;
&lt;a href="https://my.gnusolidario.org/2026/10/03/gnu-health-as-a-solution-for-europe-digital-change-and-telemedicine-train-the-trainer-digi-change-conference/?_thumbnail_id=2272"&gt;https://my.gnusol ... thumbnail_id=2272&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Sat, 03 Oct 2026 12:14:56 +0000</pubDate>

</item> 
<item>
	<title>GNU Taler news: The rise of financial surveillance - Buenos Aires, Argentina</title>
	<guid>https://taler.net/en/news/2026-11.html</guid>
	<link>https://taler.net/en/news/2026-11.html</link>
     <description>  &lt;article&gt;
             Christian Grothoff gave a talk on the importance of privacy in digital payment infrastructure and the features of GNU Taler designed for that purpose during his visit to Buenos Aires, Argentina.  The event was co-organized by the Argentine Observatory of Information Technology Law (ODIA) and NUMIS, led by Sebastian Marchano.
           &lt;/article&gt; </description> 
	<pubDate>Sun, 27 Sep 2026 22:00:00 +0000</pubDate>

</item> 
<item>
	<title>gengetopt @ Savannah: 2.23.1 is out</title>
	<guid>https://savannah.gnu.org/news/?id=10943</guid>
	<link>https://savannah.gnu.org/news/?id=10943</link>
     <description>  &lt;p&gt;Various small bug fixes, nothing major.&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Sun, 27 Sep 2026 13:22:00 +0000</pubDate>

</item> 
<item>
	<title>GNU Taler news: Taler and the successful attacks against 1024-bit RSA signatures</title>
	<guid>https://taler.net/en/news/2026-12.html</guid>
	<link>https://taler.net/en/news/2026-12.html</link>
     <description>  &lt;article&gt;
             Any real and recommended deployment of GNU Taler   is not at risk from this attack,   due to the following security measures in GNU Taler:
           &lt;/article&gt; </description> 
	<pubDate>Sat, 26 Sep 2026 22:00:00 +0000</pubDate>

</item> 
<item>
	<title>parted @ Savannah: parted-3.8 release [stable]</title>
	<guid>https://savannah.gnu.org/news/?id=10942</guid>
	<link>https://savannah.gnu.org/news/?id=10942</link>
     <description>  &lt;p&gt;This is to announce parted-3.8, a stable release. This is the same as the
&lt;br /&gt;
3.7.14 alpha release except that gnulib has been updated.
&lt;br /&gt;

&lt;br /&gt;
The full set of changes since parted 3.7:
&lt;br /&gt;

&lt;br /&gt;
Brian C. Lane (21):
&lt;br /&gt;
      maint: post-release administrivia
&lt;br /&gt;
      README-release: Fix typos in doxygen instructions
&lt;br /&gt;
      Cleanup zero as null pointer constant warnings
&lt;br /&gt;
      libparted: Catch FAT metadata triggered errors
&lt;br /&gt;
      resize: Make sure 32bit build cannot overflow frag_count
&lt;br /&gt;
      resize: Make sure hfsc_new_cachetable cannot overflow on 32bit
&lt;br /&gt;
      fdasd: Make sure data set name is positive
&lt;br /&gt;
      parted: Fix partition number allocation in do_print
&lt;br /&gt;
      maint: Update to latest gnulib and bootstrap script
&lt;br /&gt;
      maint: Update copyright statements to 2026
&lt;br /&gt;
      NEWS: Update news for next release
&lt;br /&gt;
      version 3.7.13
&lt;br /&gt;
      maint: post-release administrivia
&lt;br /&gt;
      hurd: Fix gnu_read problems with block size &amp;gt; 512b
&lt;br /&gt;
      NEWS: Update news for next release
&lt;br /&gt;
      maint: Update to latest gnulib
&lt;br /&gt;
      version 3.7.14
&lt;br /&gt;
      maint: post-release administrivia
&lt;br /&gt;
      maint: Update to latest gnulib
&lt;br /&gt;
      NEWS: Releasing stable version 3.8
&lt;br /&gt;
      version 3.8
&lt;br /&gt;

&lt;br /&gt;
Colin Watson (1):
&lt;br /&gt;
      maint: Distribute Doxyfile
&lt;br /&gt;

&lt;br /&gt;
Victor Couty (1):
&lt;br /&gt;
      Adding support for ExFAT filesystem
&lt;br /&gt;

&lt;br /&gt;
&lt;a href="mailto:bug-parted@gnu.org"&gt;bug-parted@gnu.org&lt;/a&gt; (1):
&lt;br /&gt;
      &lt;i&gt;&lt;a href="https://savannah.gnu.org/bugs/?80795"&gt;bug #80795&lt;/a&gt;&lt;/i&gt;: [PATCH] build: mark functions with const attribute, per gcc warnings
&lt;br /&gt;

&lt;br /&gt;
Brian
&lt;br /&gt;
 [on behalf of the parted maintainers]
&lt;br /&gt;
==================================================================
&lt;br /&gt;

&lt;br /&gt;
Here is the GNU parted home page:
&lt;br /&gt;
    &lt;a href="https://gnu.org/s/parted/"&gt;https://gnu ... g/s/parted/&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Here are the compressed sources and a GPG detached signature:
&lt;br /&gt;
  &lt;a href="https://ftp.gnu.org/gnu/parted/parted-3.8.tar.xz"&gt;https://ftp.gnu.o ... parted-3.8.tar.xz&lt;/a&gt;
&lt;br /&gt;
  &lt;a href="https://ftp.gnu.org/gnu/parted/parted-3.8.tar.xz.sig"&gt;https://ftp.gnu.o ... ed-3.8.tar.xz.sig&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Use a mirror for higher download bandwidth:
&lt;br /&gt;
  &lt;a href="https://www.gnu.org/order/ftp.html"&gt;https://www.gnu.o ... rg/order/ftp.html&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Here are the SHA256 and SHA3-256 checksums:
&lt;br /&gt;

&lt;br /&gt;
  File: parted-3.8.tar.xz
&lt;br /&gt;
  SHA256 sum:   a2b7811f47b0ddb1f7b1d0aa456f7c1270da70708ce231c2fe054c7199eafa63
&lt;br /&gt;
  SHA3-256 sum: dd794daa59755a9201d7cc493bcdf35903e231d48f93f7bdc79a780fcd8bf594
&lt;br /&gt;

&lt;br /&gt;
Verify the SHA256 checksum with either sha256sum, sha256, or
&lt;br /&gt;
'shasum -a 256'.
&lt;br /&gt;

&lt;br /&gt;
Verify the SHA3-256 checksum with 'cksum -a sha3 -l 256 --base64'
&lt;br /&gt;
from coreutils-9.8.
&lt;br /&gt;

&lt;br /&gt;
Use a .sig file to verify that the corresponding file (without the
&lt;br /&gt;
.sig suffix) is intact.  First, be sure to download both the .sig file
&lt;br /&gt;
and the corresponding tarball.  Then, run a command like this:
&lt;br /&gt;

&lt;br /&gt;
  gpg --verify parted-3.8.tar.xz.sig parted-3.8.tar.xz
&lt;br /&gt;

&lt;br /&gt;
The signature should match the fingerprint of the following key:
&lt;br /&gt;

&lt;br /&gt;
  pub   ed25519/FF9868A2D488A5A9 2026-04-14 [SC]
&lt;br /&gt;
        Key fingerprint = 872F 3A8A 0B84 905A FFBC  8766 FF98 68A2 D488 A5A9
&lt;br /&gt;
  uid                 [ultimate] Brian C. Lane &amp;lt;bcl@redhat.com&amp;gt;
&lt;br /&gt;

&lt;br /&gt;
If that command fails because you don't have the required public key,
&lt;br /&gt;
or that public key has expired, try the following commands to retrieve
&lt;br /&gt;
or refresh it, and then rerun the 'gpg --verify' command.
&lt;br /&gt;

&lt;br /&gt;
  gpg --locate-external-key &lt;a href="mailto:bcl@redhat.com"&gt;bcl@redhat.com&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
  gpg --recv-keys FF9868A2D488A5A9
&lt;br /&gt;

&lt;br /&gt;
  wget -q -O- '&lt;a href="https://savannah.gnu.org/project/release-gpgkeys.php?group=parted&amp;amp;download=1"&gt;https://savannah. ... ed&amp;amp;download=1&lt;/a&gt;' | gpg --import -
&lt;br /&gt;

&lt;br /&gt;
As a last resort to find the key, you can try the official GNU
&lt;br /&gt;
keyring:
&lt;br /&gt;

&lt;br /&gt;
  wget -q &lt;a href="https://ftp.gnu.org/gnu/gnu-keyring.gpg"&gt;https://ftp.gnu.o ... u/gnu-keyring.gpg&lt;/a&gt;
&lt;br /&gt;
  gpg --keyring gnu-keyring.gpg --verify parted-3.8.tar.xz.sig parted-3.8.tar.xz
&lt;br /&gt;

&lt;br /&gt;
This release is based on the parted git repository, available as
&lt;br /&gt;

&lt;br /&gt;
  git clone &lt;a href="https://https.git.savannah.gnu.org/git/parted.git"&gt;https://https.git ... rg/git/parted.git&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
with commit 5f600791b40a48c51aeb6db0432e67a29e8e7951 tagged as v3.8.
&lt;br /&gt;

&lt;br /&gt;
For a summary of changes and contributors, see:
&lt;br /&gt;

&lt;br /&gt;
  &lt;a href="https://gitweb.git.savannah.gnu.org/gitweb/?p=parted.git;a=shortlog;h=v3.8"&gt;https://gitweb.gi ... a=shortlog;h=v3.8&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
or run this command from a git-cloned parted directory:
&lt;br /&gt;

&lt;br /&gt;
  git shortlog v3.7.14..v3.8
&lt;br /&gt;

&lt;br /&gt;
This release was bootstrapped with the following tools:
&lt;br /&gt;
  Autoconf 2.72
&lt;br /&gt;
  Automake 1.18.1
&lt;br /&gt;
  Gettext 0.25.1
&lt;br /&gt;
  Gnulib 2026-09-23 0b416a8a26dbdaea4f413d4fb0c41ef8ea846e4d
&lt;br /&gt;
  Gperf 3.2.1
&lt;br /&gt;

&lt;br /&gt;
NEWS
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Noteworthy changes in release 3.8 (2026-09-23) [stable]
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
  Promoting alpha release to stable release 3.8&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Wed, 23 Sep 2026 23:28:09 +0000</pubDate>

</item> 
<item>
	<title>parallel @ Savannah: GNU Parallel 20260922 ('Parton') released [stable]</title>
	<guid>https://savannah.gnu.org/news/?id=10941</guid>
	<link>https://savannah.gnu.org/news/?id=10941</link>
     <description>  &lt;p&gt;GNU Parallel 20260922 ('Parton') has been released. It is available for download at: lbry://@GnuParallel:4
&lt;br /&gt;

&lt;br /&gt;
Quote of the month:
&lt;br /&gt;

&lt;br /&gt;
  GNU parallel is awesome. Use it more often in your scripts!
&lt;br /&gt;
    -- Wade @WadeGrimshire@twitter
&lt;br /&gt;

&lt;br /&gt;
New in this release:
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bug fixes and man page updates.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
GNU Parallel - For people who live life in the parallel lane.
&lt;br /&gt;

&lt;br /&gt;
If you like GNU Parallel record a video testimonial: Say who you are, what you use GNU Parallel for, how it helps you, and what you like most about it. Include a command that uses GNU Parallel if you feel like it.
&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;h2&gt;About GNU Parallel&lt;/h2&gt;
&lt;p&gt;
&lt;br /&gt;
GNU Parallel is a shell tool for executing jobs in parallel using one or more computers. A job can be a single command or a small script that has to be run for each of the lines in the input. The typical input is a list of files, a list of hosts, a list of users, a list of URLs, or a list of tables. A job can also be a command that reads from a pipe. GNU Parallel can then split the input and pipe it into commands in parallel.
&lt;br /&gt;

&lt;br /&gt;
If you use xargs and tee today you will find GNU Parallel very easy to use as GNU Parallel is written to have the same options as xargs. If you write loops in shell, you will find GNU Parallel may be able to replace most of the loops and make them run faster by running several jobs in parallel. GNU Parallel can even replace nested loops.
&lt;br /&gt;

&lt;br /&gt;
GNU Parallel makes sure output from the commands is the same output as you would get had you run the commands sequentially. This makes it possible to use output from GNU Parallel as input for other programs.
&lt;br /&gt;

&lt;br /&gt;
For example you can run this to convert all jpeg files into png and gif files and have a progress bar:
&lt;br /&gt;

&lt;br /&gt;
  parallel --bar convert {1} {1.}.{2} ::: *.jpg ::: png gif
&lt;br /&gt;

&lt;br /&gt;
Or you can generate big, medium, and small thumbnails of all jpeg files in sub dirs:
&lt;br /&gt;

&lt;br /&gt;
  find . -name '*.jpg' |
&lt;br /&gt;
    parallel convert -geometry {2} {1} {1//}/thumb{2}_{1/} :::: - ::: 50 100 200
&lt;br /&gt;

&lt;br /&gt;
You can find more about GNU Parallel at: &lt;a href="http://www.gnu.org/s/parallel/"&gt;http://www.gnu ... rg/s/parallel/&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
You can install GNU Parallel in just 10 seconds with:
&lt;br /&gt;

&lt;br /&gt;
    $ (wget -O - pi.dk/3 || lynx -source pi.dk/3 || curl pi.dk/3/ || \
&lt;br /&gt;
       fetch -o - &lt;a href="http://pi.dk/3"&gt;http://pi.dk/3&lt;/a&gt; ) &amp;gt; install.sh
&lt;br /&gt;
    $ sha1sum install.sh | grep c555f616391c6f7c28bf938044f4ec50
&lt;br /&gt;
    12345678 c555f616 391c6f7c 28bf9380 44f4ec50
&lt;br /&gt;
    $ md5sum install.sh | grep 707275363428aa9e9a136b9a7296dfe4
&lt;br /&gt;
    70727536 3428aa9e 9a136b9a 7296dfe4
&lt;br /&gt;
    $ sha512sum install.sh | grep b24bfe249695e0236f6bc7de85828fe1f08f4259
&lt;br /&gt;
    83320d89 f56698ec 77454856 895edc3e aa16feab 2757966e 5092ef2d 661b8b45
&lt;br /&gt;
    b24bfe24 9695e023 6f6bc7de 85828fe1 f08f4259 6ce5480a 5e1571b2 8b722f21
&lt;br /&gt;
    $ bash install.sh
&lt;br /&gt;

&lt;br /&gt;
Watch the intro video on &lt;a href="http://www.youtube.com/playlist?list=PL284C9FF2488BC6D1"&gt;http://www.youtub ... L284C9FF2488BC6D1&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Walk through the tutorial (man parallel_tutorial). Your command line will love you for it.
&lt;br /&gt;

&lt;br /&gt;
When using programs that use GNU Parallel to process data for publication please cite:
&lt;br /&gt;

&lt;br /&gt;
O. Tange (2018): GNU Parallel 2018, March 2018, &lt;a href="https://doi.org/10.5281/zenodo.1146014"&gt;https://doi.org/1 ... 81/zenodo.1146014&lt;/a&gt;.
&lt;br /&gt;

&lt;br /&gt;
If you like GNU Parallel:
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Give a demo at your local user group/team/colleagues
&lt;/li&gt;
&lt;li&gt;Post the intro videos on Reddit/Diaspora*/forums/blogs/ Identi.ca/Google+/Twitter/Facebook/Linkedin/mailing lists
&lt;/li&gt;
&lt;li&gt;Get the merchandise &lt;a href="https://gnuparallel.threadless.com/designs/gnu-parallel"&gt;https://gnuparall ... igns/gnu-parallel&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Request or write a review for your favourite blog or magazine
&lt;/li&gt;
&lt;li&gt;Request or build a package for your favourite distribution (if it is not already there)
&lt;/li&gt;
&lt;li&gt;Invite me for your next conference
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
If you use programs that use GNU Parallel for research:
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Please cite GNU Parallel in you publications (use --citation)
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
If GNU Parallel saves you money:
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;(Have your company) donate to FSF &lt;a href="https://my.fsf.org/donate/"&gt;https://my.f ... .org/donate/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;h2&gt;About GNU SQL&lt;/h2&gt;
&lt;p&gt;
&lt;br /&gt;
GNU sql aims to give a simple, unified interface for accessing databases through all the different databases' command line clients. So far the focus has been on giving a common way to specify login information (protocol, username, password, hostname, and port number), size (database and table size), and running queries.
&lt;br /&gt;

&lt;br /&gt;
The database is addressed using a DBURL. If commands are left out you will get that database's interactive shell.
&lt;br /&gt;

&lt;br /&gt;
When using GNU SQL for a publication please cite:
&lt;br /&gt;

&lt;br /&gt;
O. Tange (2011): GNU SQL - A Command Line Tool for Accessing Different Databases Using DBURLs, ;login: The USENIX Magazine, April 2011:29-32.
&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;h2&gt;About GNU Niceload&lt;/h2&gt;
&lt;p&gt;
&lt;br /&gt;
GNU niceload slows down a program when the computer load average (or other system activity) is above a certain limit. When the limit is reached the program will be suspended for some time. If the limit is a soft limit the program will be allowed to run for short amounts of time before being suspended again. If the limit is a hard limit the program will only be allowed to run when the system is below the limit.&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Tue, 22 Sep 2026 19:36:40 +0000</pubDate>

</item> 
<item>
	<title>automake @ Savannah: automake 1.19 released [stable]</title>
	<guid>https://savannah.gnu.org/news/?id=10940</guid>
	<link>https://savannah.gnu.org/news/?id=10940</link>
     <description>  &lt;p&gt;Automake 1.19 released. Announcement: 
&lt;br /&gt;

&lt;br /&gt;
&lt;a href="https://lists.gnu.org/archive/html/autotools-announce/2026-09/msg00001.html"&gt;https://lists.gnu ... -09/msg00001.html&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Tue, 22 Sep 2026 14:01:09 +0000</pubDate>

</item> 
<item>
	<title>gzip @ Savannah: gzip-1.15 released [stable]</title>
	<guid>https://savannah.gnu.org/news/?id=10936</guid>
	<link>https://savannah.gnu.org/news/?id=10936</link>
     <description>  &lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;blockquote class="verbatim"&gt;&lt;p&gt; This is to announce gzip-1.15, a stable release.&lt;br /&gt;
Special thanks to Paul Eggert for his indefatigable support.&lt;br /&gt;
&lt;br /&gt;
There have been 119 commits by 5 people in the 75 weeks since 1.14.&lt;br /&gt;
&lt;br /&gt;
See the NEWS below for a brief summary.&lt;br /&gt;
&lt;br /&gt;
Thanks to everyone who has contributed!&lt;br /&gt;
The following people contributed changes to this release:&lt;br /&gt;
&lt;br /&gt;
  Bruno Haible (2)&lt;br /&gt;
  Collin Funk (2)&lt;br /&gt;
  Jim Meyering (24)&lt;br /&gt;
  Mark Adler (3)&lt;br /&gt;
  Paul Eggert (88)&lt;br /&gt;
&lt;br /&gt;
Jim&lt;br /&gt;
 [on behalf of the gzip maintainers]&lt;br /&gt;
==================================================================&lt;br /&gt;
&lt;br /&gt;
Here is the GNU gzip home page:&lt;br /&gt;
    https://gnu.org/s/gzip/&lt;br /&gt;
&lt;br /&gt;
Here are the compressed sources:&lt;br /&gt;
  https://ftp.gnu.org/gnu/gzip/gzip-1.15.tar.gz   (1.2MB)&lt;br /&gt;
  https://ftp.gnu.org/gnu/gzip/gzip-1.15.tar.xz   (792KB)&lt;br /&gt;
  https://ftp.gnu.org/gnu/gzip/gzip-1.15.zip   (1.5MB)&lt;br /&gt;
&lt;br /&gt;
Here are the GPG detached signatures:&lt;br /&gt;
  https://ftp.gnu.org/gnu/gzip/gzip-1.15.tar.gz.sig&lt;br /&gt;
  https://ftp.gnu.org/gnu/gzip/gzip-1.15.tar.xz.sig&lt;br /&gt;
  https://ftp.gnu.org/gnu/gzip/gzip-1.15.zip.sig&lt;br /&gt;
&lt;br /&gt;
Use a mirror for higher download bandwidth:&lt;br /&gt;
  https://www.gnu.org/order/ftp.html&lt;br /&gt;
&lt;br /&gt;
Here are the SHA256 and SHA3-256 checksums:&lt;br /&gt;
&lt;br /&gt;
  SHA256 (gzip-1.15.tar.gz) = VFiGz1f6iKZeln+/cFkD1/yyVnyCxzQkk+gujXsaIQs=&lt;br /&gt;
  SHA3-256 (gzip-1.15.tar.gz) = Pi3C560xPn/r7b8OPXzDZolBiOfpW/Bo9G+wUAdbgCw=&lt;br /&gt;
  SHA256 (gzip-1.15.tar.xz) = mqDMeA3sFWuCgoRIM7NCq3ywjCXSzZoYac3Q3zHe/0g=&lt;br /&gt;
  SHA3-256 (gzip-1.15.tar.xz) = gwwVDPignGjkxS/sw1QPN+PInnUE5sxAjkefL5C3/Mk=&lt;br /&gt;
  SHA256 (gzip-1.15.zip) = UvU0W04E/rexLC/qZ1/40GucNXMTtUh2yDu6cdICzhA=&lt;br /&gt;
  SHA3-256 (gzip-1.15.zip) = nhoi+h4j1rwxGJSA8pwkqehAoraNQGbcgvGxYOcxQkg=&lt;br /&gt;
&lt;br /&gt;
Verify the base64 SHA256 checksum with 'cksum -a sha256 --check'&lt;br /&gt;
from coreutils-9.2 or OpenBSD's cksum since 2007.&lt;br /&gt;
&lt;br /&gt;
Verify the base64 SHA3-256 checksum with 'cksum -a sha3 --check'&lt;br /&gt;
from coreutils-9.8.&lt;br /&gt;
&lt;br /&gt;
Use a .sig file to verify that the corresponding file (without the&lt;br /&gt;
.sig suffix) is intact.  First, be sure to download both the .sig file&lt;br /&gt;
and the corresponding tarball.  Then, run a command like this:&lt;br /&gt;
&lt;br /&gt;
  gpg --verify gzip-1.15.tar.gz.sig gzip-1.15.tar.gz&lt;br /&gt;
&lt;br /&gt;
The signature should match the fingerprint of the following key:&lt;br /&gt;
&lt;br /&gt;
  pub   rsa4096/0x7FD9FCCB000BEEEE 2010-06-14 [SCEA]&lt;br /&gt;
        Key fingerprint = 155D 3FC5 00C8 3448 6D1E  EA67 7FD9 FCCB 000B EEEE&lt;br /&gt;
  uid                   [ultimate] Jim Meyering &amp;lt;jim@meyering.net&amp;gt;&lt;br /&gt;
  uid                   [ultimate] Jim Meyering &amp;lt;meyering@fb.com&amp;gt;&lt;br /&gt;
  uid                   [ultimate] Jim Meyering &amp;lt;meyering@gnu.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If that command fails because you don't have the required public key,&lt;br /&gt;
or that public key has expired, try the following commands to retrieve&lt;br /&gt;
or refresh it, and then rerun the 'gpg --verify' command.&lt;br /&gt;
&lt;br /&gt;
  gpg --locate-external-key jim@meyering.net&lt;br /&gt;
&lt;br /&gt;
  gpg --recv-keys 7FD9FCCB000BEEEE&lt;br /&gt;
&lt;br /&gt;
  wget -q -O- 'https://savannah.gnu.org/project/release-gpgkeys.php?group=gzip&amp;amp;download=1' | gpg --import -&lt;br /&gt;
&lt;br /&gt;
As a last resort to find the key, you can try the official GNU&lt;br /&gt;
keyring:&lt;br /&gt;
&lt;br /&gt;
  wget -q https://ftp.gnu.org/gnu/gnu-keyring.gpg&lt;br /&gt;
  gpg --keyring gnu-keyring.gpg --verify gzip-1.15.tar.gz.sig gzip-1.15.tar.gz&lt;br /&gt;
&lt;br /&gt;
This release is based on the gzip git repository, available as&lt;br /&gt;
&lt;br /&gt;
  git clone https://https.git.savannah.gnu.org/git/gzip.git&lt;br /&gt;
&lt;br /&gt;
with commit e6263160768c73f6117f3c1de78291a60f2cb796 tagged as v1.15.&lt;br /&gt;
&lt;br /&gt;
For a summary of changes and contributors, see:&lt;br /&gt;
&lt;br /&gt;
  https://gitweb.git.savannah.gnu.org/gitweb/?p=gzip.git;a=shortlog;h=v1.15&lt;br /&gt;
&lt;br /&gt;
or run this command from a git-cloned gzip directory:&lt;br /&gt;
&lt;br /&gt;
  git shortlog v1.14..v1.15&lt;br /&gt;
&lt;br /&gt;
This release was bootstrapped with the following tools:&lt;br /&gt;
  Autoconf 2.73.1-b400b&lt;br /&gt;
  Automake 1.19&lt;br /&gt;
  Gnulib 2026-09-04 331c8d065a8a753de71f084f068473ccd5e4c34a&lt;br /&gt;
&lt;br /&gt;
NEWS&lt;br /&gt;
&lt;br /&gt;
* Noteworthy changes in release 1.15 (2026-09-20) [stable]&lt;br /&gt;
&lt;br /&gt;
** Bug fixes&lt;br /&gt;
&lt;br /&gt;
  gzip no longer can mistakenly remove the wrong file if some other&lt;br /&gt;
  process simultaneously renames a gzip destination's ancestor.&lt;br /&gt;
  [bug present since the beginning]&lt;br /&gt;
&lt;br /&gt;
  gzip -d no longer rejects PKZIP signatures, local header, and data&lt;br /&gt;
  descriptors.  These can appear in well-formed streamed zip files.&lt;br /&gt;
  [bug present since the beginning]&lt;br /&gt;
&lt;br /&gt;
  gzip diagnostics now quote file names containing unusual characters.&lt;br /&gt;
  [bug present since the beginning]&lt;br /&gt;
&lt;br /&gt;
  A use of uninitialized memory on some malformed inputs has been fixed.&lt;br /&gt;
  [bug present since the beginning]&lt;br /&gt;
&lt;br /&gt;
  A buffer overflow has been fixed when decompressing an .lzh file&lt;br /&gt;
  after decompressing a .Z file.&lt;br /&gt;
  [bug present since the beginning]&lt;br /&gt;
&lt;br /&gt;
  When decompressing an .lzh file, the output is no longer corrupted&lt;br /&gt;
  when an internal bit buffer is not properly cleared.&lt;br /&gt;
  [bug present since the beginning]&lt;br /&gt;
&lt;br /&gt;
  When decompressing an .lzh file after another .lzh file, the output is&lt;br /&gt;
  no longer corrupted by the previous file's decoding table.&lt;br /&gt;
  [bug present since the beginning]&lt;br /&gt;
&lt;br /&gt;
  gzip --synchronous no longer fails to synchronize unreadable parent&lt;br /&gt;
  directories on platforms like GNU/Linux that have O_PATH, or to&lt;br /&gt;
  synchronize any parent directories on platforms like FreeBSD that&lt;br /&gt;
  have O_SEARCH but not O_PATH.&lt;br /&gt;
  [bug introduced in gzip-1.7]&lt;br /&gt;
&lt;br /&gt;
  On old-fashioned or limited platforms lacking mktemp, gzexe, zdiff&lt;br /&gt;
  and znew no longer have a race when creating a temporary file.&lt;br /&gt;
  [bug present since the beginning]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
** Changes in behavior&lt;br /&gt;
&lt;br /&gt;
  gzip no longer insists on the "C" locale; instead, it follows the&lt;br /&gt;
  typical practice of using the locale specified by the environment.&lt;br /&gt;
  This change, which is needed for file name quoting, can affect the&lt;br /&gt;
  format of floating-point numbers output by gzip's -l and -v options.&lt;br /&gt;
  Diagnostics are still in English, though.&lt;br /&gt;
&lt;br /&gt;
  gzip -l now reports "-Inf%" instead of "0.0%" for the infinite&lt;br /&gt;
  compression ratio of an empty file.&lt;br /&gt;
&lt;br /&gt;
  znew's -P option is now ignored, with a warning.  It was present&lt;br /&gt;
  only to improve performance, and its implementation had too many&lt;br /&gt;
  bugs to be worth supporting.&lt;br /&gt;
&lt;br /&gt;
** Platforms no longer supported&lt;br /&gt;
&lt;br /&gt;
  The following platforms (or earlier) are no longer supported because&lt;br /&gt;
  their old multibyte libraries do not work well enough: FreeBSD 4.11&lt;br /&gt;
  (2005), HP-UX 11.00 (1997), Minix 3.1.8 (2010), MS-Windows 8.1&lt;br /&gt;
  (2013) via mingw without UCRT.&lt;br /&gt;
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Sun, 20 Sep 2026 08:05:16 +0000</pubDate>

</item> 
<item>
	<title>pspp @ Savannah: PSPP 2.1.2 has been released.</title>
	<guid>https://savannah.gnu.org/news/?id=10935</guid>
	<link>https://savannah.gnu.org/news/?id=10935</link>
     <description>  &lt;p&gt;I'm very pleased to announce the release of a new version of GNU PSPP.  PSPP is a program for statistical analysis of sampled data.  It is a free replacement for the proprietary program SPSS.
&lt;br /&gt;

&lt;br /&gt;
Changes from 2.1.1 to 2.1.2:
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Translation updates.
&lt;/li&gt;
&lt;li&gt;Bug fixes.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Please send PSPP bug reports to bug-gnu-pspp@gnu.org.&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Sat, 19 Sep 2026 21:23:59 +0000</pubDate>

</item> 
<item>
	<title>www @ Savannah: What's Wrong with GitHub?</title>
	<guid>https://savannah.gnu.org/news/?id=10934</guid>
	<link>https://savannah.gnu.org/news/?id=10934</link>
     <description>  &lt;p&gt;A new article by Jacob Bachmeyer and Richard Stallman
&lt;br /&gt;
to answer the question, &lt;b&gt;What's Wrong with GitHub?&lt;/b&gt; 
&lt;br /&gt;
has been published at &lt;a href="https://www.gnu.org/philosophy/whats-wrong-with-github.html"&gt;https://www.gnu.o ... -with-github.html&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;blockquote class="verbatim"&gt;&lt;p&gt; Software developers, the GNU Project urges you to avoid&lt;br /&gt;
hosting your repositories on GitHub. This is to avoid&lt;br /&gt;
being on the receiving end of harmful practices, and&lt;br /&gt;
avoid leading others to be victims too. This article&lt;br /&gt;
focuses on a few of GitHub's worst problems, and the&lt;br /&gt;
wrongs and harm they can do.&lt;br /&gt;
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Wed, 16 Sep 2026 21:57:15 +0000</pubDate>

</item> 
<item>
	<title>unifont @ Savannah: Unifont 18.0.01 Released</title>
	<guid>https://savannah.gnu.org/news/?id=10933</guid>
	<link>https://savannah.gnu.org/news/?id=10933</link>
     <description>  &lt;p&gt;&lt;b&gt;16 September 2026&lt;/b&gt; Unifont 18.0.01 is now available.  This release is aligned with Unicode 18.0.0, adding almost 400 new glyphs.
&lt;br /&gt;

&lt;br /&gt;
Download this release from GNU server mirrors at:
&lt;br /&gt;

&lt;br /&gt;
     &lt;a href="https://ftpmirror.gnu.org/unifont/unifont-18.0.01/"&gt;https://ftpmirror ... /unifont-18.0.01/&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
or if that fails,
&lt;br /&gt;

&lt;br /&gt;
     &lt;a href="https://ftp.gnu.org/gnu/unifont/unifont-18.0.01/"&gt;https://ftp.gnu.o ... /unifont-18.0.01/&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
or, as a last resort,
&lt;br /&gt;

&lt;br /&gt;
     &lt;a href="ftp://ftp.gnu.org/gnu/unifont/unifont-18.0.01/"&gt;ftp://ftp.gnu.org ... /unifont-18.0.01/&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
These files are also available on the unifoundry.com website:
&lt;br /&gt;

&lt;br /&gt;
     &lt;a href="https://unifoundry.com/pub/unifont/unifont-18.0.01/"&gt;https://unifoundr ... /unifont-18.0.01/&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Font files are in the subdirectory
&lt;br /&gt;

&lt;br /&gt;
     &lt;a href="https://unifoundry.com/pub/unifont/unifont-18.0.01/font-builds/"&gt;https://unifoundr ... 0.01/font-builds/&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
A more detailed description of font changes is available at
&lt;br /&gt;

&lt;br /&gt;
      &lt;a href="https://unifoundry.com/unifont/index.html"&gt;https://unifoundr ... nifont/index.html&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
and of utility program changes at
&lt;br /&gt;

&lt;br /&gt;
      &lt;a href="https://unifoundry.com/unifont/unifont-utilities.html"&gt;https://unifoundr ... nt-utilities.html&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Information about Hangul modifications is at
&lt;br /&gt;

&lt;br /&gt;
      &lt;a href="https://unifoundry.com/hangul/index.html"&gt;https://unifoundr ... hangul/index.html&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
and
&lt;br /&gt;

&lt;br /&gt;
      &lt;a href="http://unifoundry.com/hangul/hangul-generation.html"&gt;http://unifoundry ... l-generation.html&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Enjoy!
&lt;br /&gt;
Paul Hardy, GNU Unifont Maintainer&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Wed, 16 Sep 2026 16:36:44 +0000</pubDate>

</item> 
<item>
	<title>GNU Health: GNUHealthCon 2026 – XI Free Software and Social Medicine Conference</title>
	<guid>https://my.gnusolidario.org/?p=2252</guid>
	<link>https://my.gnusolidario.org/2026/09/15/gnuhealthcon-2026-xi-free-software-and-social-medicine-conference/</link>
     <description>  &lt;p&gt;Dear community&lt;/p&gt;



&lt;p&gt;The XI edition of GNUHealthCon will take place in Gran Canaria, Spain, this December 18th, and you are invited!&lt;/p&gt;



&lt;h3 class="extendedwopts-md-justify wp-block-heading"&gt;Celebrating 20 years of Freedom and  Equity in Healthcare&lt;/h3&gt;



&lt;p&gt;This edition is special for us because we will be celebrating the 20th anniversary of the first GNU Solidario mission that took place in Santiago del Estero, Argentina in October 2006.  That remote rural school, the teachers, the children and their families generated a profound inspirational impact on me, so deep that since then I have dedicated most of my life to the field Social Medicine. GNU Health is both a result of that experience, and the main channel to deliver freedom and dignity around the globe.  &lt;/p&gt;



&lt;p&gt;&lt;/p&gt;


&lt;div class="wp-block-image is-style-rounded"&gt;
&lt;figure class="aligncenter size-full is-resized"&gt;&lt;img alt="Pictures from the first mission. Rural school Nuestra SeÃ±ora de la Merced, Santiago del Estero, Oct 6th 2006" class="wp-image-2254" height="473" src="https://my.gnusolidario.org/wp-content/uploads/2026/09/image.png" style="width: 648px; height: auto;" width="1252" /&gt;&lt;/figure&gt;&lt;/div&gt;


&lt;p class="has-text-align-right"&gt;&lt;/p&gt;



&lt;p&gt;In this edition, besides the technical and social talks, we will have the space to commemorate these 20 years. During these two decades we have gone through many things. We have many happy stories to share, but we also have sad ones, that made us learn and be more resilient. Stories of people from countries around the world that have conformed this wonderful community around GNU Solidario. Stories and experiences that have made GNU Health the leading Free/Libre Health and Hospital Information System.&lt;/p&gt;



&lt;p&gt;I want to personally invite all of you who has been part of this beautiful journey: The GNU community; hospitals and health institutions around the world that use GNU Health; sister projects (Tryton, Orthanc,..); national and regional governments that have adopted GNU Health; sponsors; the open science and academic communities; developers and core team members… you are all part of the success of the project and we have to celebrate this edition together.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;


&lt;div class="wp-block-image"&gt;
&lt;figure class="aligncenter size-large is-resized"&gt;&lt;img alt="The GHCON2026 conference banner" class="wp-image-2257" height="367" src="https://my.gnusolidario.org/wp-content/uploads/2026/09/image-1-1024x367.png" style="width: 630px; height: auto;" width="1024" /&gt;&lt;/figure&gt;&lt;/div&gt;


&lt;p&gt;&lt;/p&gt;



&lt;h2 class="wp-block-heading"&gt;&lt;strong&gt;Pre-conference party&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;GHCON2026 will be on Friday, December 18th in Gran Canaria. The night before we will have the pre-conference party. Most probably, the event will be in a hotel in the mountains, and the idea is to arrive to the&lt;strong&gt; hotel on Thursday 17th&lt;/strong&gt;. We will update in our official &lt;a href="https://mastodon.social/@gnuhealth"&gt;Mastodon&lt;/a&gt; account. (look for #GHCon2026 hashtag)&lt;/p&gt;



&lt;p&gt;Please make sure you register (&lt;a href="https://www.gnuhealth.org/ghcon/2026/"&gt;https://www.gnuhealth.org/ghcon/2026/&lt;/a&gt;) so we can prepare de logistics.&lt;/p&gt;



&lt;p&gt;Looking forward to meeting personally all of you, and have a wonderful time in Gran Canaria!&lt;/p&gt;



&lt;p&gt;Love and happy hacking&lt;br /&gt;Luis&lt;/p&gt;



&lt;p&gt; &lt;/p&gt; </description> 
	<pubDate>Tue, 15 Sep 2026 12:20:28 +0000</pubDate>

</item> 
<item>
	<title>FSF News: GNU Boot joins FSF fiscal sponsorship program</title>
	<guid>http://www.fsf.org/news/2026-gnu-boot-joins-fsf-fiscal-sponsorship-program</guid>
	<link>http://www.fsf.org/news/2026-gnu-boot-joins-fsf-fiscal-sponsorship-program</link>
     <description>  BOSTON, Massachusetts, USA (Monday, September 14, 2026), â€” The Free Software Foundation (FSF) announced today that GNU Boot is its latest fiscally sponsored project. GNU Boot is a libre, ethical replacement for the nonfree BIOS or UEFI, which is software found in virtually all personal computers in the world today. </description> 
	<pubDate>Mon, 14 Sep 2026 21:55:00 +0000</pubDate>

</item> 
<item>
	<title>coreutils @ Savannah: coreutils-9.12 released [stable]</title>
	<guid>https://savannah.gnu.org/news/?id=10932</guid>
	<link>https://savannah.gnu.org/news/?id=10932</link>
     <description>  &lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;blockquote class="verbatim"&gt;&lt;p&gt; This is to announce coreutils-9.12, a stable release.&lt;br /&gt;
&lt;br /&gt;
Notable changes include:&lt;br /&gt;
&lt;br /&gt;
env supports a new --env0-from=FILE option to support&lt;br /&gt;
full persistence and restoration of the environment.&lt;br /&gt;
This also supports e.g. filtering like:&lt;br /&gt;
  env -i --env0-from=&amp;lt;( env -0 | sed -z ... )&lt;br /&gt;
&lt;br /&gt;
Commands now have safer terminal output,&lt;br /&gt;
avoiding confusing output or corrupted terminal state.&lt;br /&gt;
&lt;br /&gt;
Commands that traverse directories no longer&lt;br /&gt;
fail merely if files are being removed in parallel.&lt;br /&gt;
&lt;br /&gt;
ptx has improved robustness, avoiding potential infinite loops.&lt;br /&gt;
&lt;br /&gt;
tee fixes robustness issues introduced in the previous release,&lt;br /&gt;
where it could go into an infinite loop or incorrectly error&lt;br /&gt;
in the presence of short writes.&lt;br /&gt;
&lt;br /&gt;
stty is more accepting of variations in requested speed.&lt;br /&gt;
&lt;br /&gt;
sort(1) will now better use available memory&lt;br /&gt;
and parallel operation when reading from pipes.&lt;br /&gt;
&lt;br /&gt;
There have also been many bug fixes and other changes&lt;br /&gt;
as summarized in the NEWS below.&lt;br /&gt;
&lt;br /&gt;
There have been 288 commits by 16 people in the 21 weeks since 9.11.&lt;br /&gt;
Thanks to everyone who has contributed!&lt;br /&gt;
&lt;br /&gt;
  Arun Bhattacharya (1)           Leonid Evdokimov (1)&lt;br /&gt;
  Ayesha Shafique (1)             Mateusz Nosek (1)&lt;br /&gt;
  Bruno Haible (5)                Max Downey Twiss (1)&lt;br /&gt;
  Collin Funk (98)                Paul Eggert (12)&lt;br /&gt;
  Guanqiang Han (1)               Pádraig Brady (118)&lt;br /&gt;
  H. Peter Anvin (1)              Sylvestre Ledru (33)&lt;br /&gt;
  Ismail Ramzi (1)                aizu-m (2)&lt;br /&gt;
  Iván Ezequiel Rodriguez (2)     oech3 (11)&lt;br /&gt;
&lt;br /&gt;
Pádraig [on behalf of the coreutils maintainers]&lt;br /&gt;
==================================================================&lt;br /&gt;
&lt;br /&gt;
Here is the GNU coreutils home page:&lt;br /&gt;
    https://gnu.org/s/coreutils/&lt;br /&gt;
&lt;br /&gt;
Here are the compressed sources:&lt;br /&gt;
  https://ftp.gnu.org/gnu/coreutils/coreutils-9.12.tar.gz   (16MB)&lt;br /&gt;
  https://ftp.gnu.org/gnu/coreutils/coreutils-9.12.tar.xz   (6.4MB)&lt;br /&gt;
&lt;br /&gt;
Here are the GPG detached signatures:&lt;br /&gt;
  https://ftp.gnu.org/gnu/coreutils/coreutils-9.12.tar.gz.sig&lt;br /&gt;
  https://ftp.gnu.org/gnu/coreutils/coreutils-9.12.tar.xz.sig&lt;br /&gt;
&lt;br /&gt;
Use a mirror for higher download bandwidth:&lt;br /&gt;
  https://www.gnu.org/order/ftp.html&lt;br /&gt;
&lt;br /&gt;
Here are the SHA256 and SHA3-256 checksums:&lt;br /&gt;
&lt;br /&gt;
  SHA256 (coreutils-9.12.tar.gz) = FMv1pN4Me3+jufp/raTFiy3v4zM2qo/YPXYixcTr3BM=&lt;br /&gt;
  SHA3-256 (coreutils-9.12.tar.gz) = 14aJyepDW60jsaL4cq5T/UFMwUJEkXDyUqZEQlsnLFM=&lt;br /&gt;
  SHA256 (coreutils-9.12.tar.xz) = pIAZhVlzPps9qZnpBUOsb4iKLKpUTY1mTFofF+Uo4hA=&lt;br /&gt;
  SHA3-256 (coreutils-9.12.tar.xz) = cKcyD1sxJr1tdWgWbh0+OKwOEIpaf2ACThlaHZooZDA=&lt;br /&gt;
&lt;br /&gt;
Verify the base64 SHA256 checksum with 'cksum -a sha256 --check'&lt;br /&gt;
from coreutils-9.2 or OpenBSD's cksum since 2007.&lt;br /&gt;
&lt;br /&gt;
Verify the base64 SHA3-256 checksum with 'cksum -a sha3 --check'&lt;br /&gt;
from coreutils-9.8.&lt;br /&gt;
&lt;br /&gt;
Use a .sig file to verify that the corresponding file (without the&lt;br /&gt;
.sig suffix) is intact.  First, be sure to download both the .sig file&lt;br /&gt;
and the corresponding tarball.  Then, run a command like this:&lt;br /&gt;
&lt;br /&gt;
  gpg --verify coreutils-9.12.tar.gz.sig coreutils-9.12.tar.gz&lt;br /&gt;
&lt;br /&gt;
The signature should match the fingerprint of the following key:&lt;br /&gt;
&lt;br /&gt;
  pub   rsa4096/0xDF6FD971306037D9 2011-09-23 [SC]&lt;br /&gt;
        Key fingerprint = 6C37 DC12 121A 5006 BC1D  B804 DF6F D971 3060 37D9&lt;br /&gt;
  uid                   [ultimate] Pádraig Brady &amp;lt;P@draigBrady.com&amp;gt;&lt;br /&gt;
  uid                   [ultimate] Pádraig Brady &amp;lt;pixelbeat@gnu.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If that command fails because you don't have the required public key,&lt;br /&gt;
or that public key has expired, try the following commands to retrieve&lt;br /&gt;
or refresh it, and then rerun the 'gpg --verify' command.&lt;br /&gt;
&lt;br /&gt;
  gpg --locate-external-key P@draigBrady.com&lt;br /&gt;
&lt;br /&gt;
  gpg --recv-keys DF6FD971306037D9&lt;br /&gt;
&lt;br /&gt;
  wget -q -O- 'https://savannah.gnu.org/project/release-gpgkeys.php?group=coreutils&amp;amp;download=1' | gpg --import -&lt;br /&gt;
&lt;br /&gt;
As a last resort to find the key, you can try the official GNU&lt;br /&gt;
keyring:&lt;br /&gt;
&lt;br /&gt;
  wget -q https://ftp.gnu.org/gnu/gnu-keyring.gpg&lt;br /&gt;
  gpg --keyring gnu-keyring.gpg --verify coreutils-9.12.tar.gz.sig coreutils-9.12.tar.gz&lt;br /&gt;
&lt;br /&gt;
This release is based on the coreutils git repository, available as&lt;br /&gt;
&lt;br /&gt;
  git clone https://https.git.savannah.gnu.org/git/coreutils.git&lt;br /&gt;
&lt;br /&gt;
with commit c0f8514d989184921d9b12a4d103a7b23abc5af8 tagged as v9.12.&lt;br /&gt;
&lt;br /&gt;
For a summary of changes and contributors, see:&lt;br /&gt;
&lt;br /&gt;
  https://gitweb.git.savannah.gnu.org/gitweb/?p=coreutils.git;a=shortlog;h=v9.12&lt;br /&gt;
&lt;br /&gt;
or run this command from a git-cloned coreutils directory:&lt;br /&gt;
&lt;br /&gt;
  git shortlog v9.11..v9.12&lt;br /&gt;
&lt;br /&gt;
This release was bootstrapped with the following tools:&lt;br /&gt;
  Autoconf 2.73.16-0a513&lt;br /&gt;
  Automake 1.18.1&lt;br /&gt;
  Gnulib 2026-09-07 106e9b2384d08a1696fcbd40cbab52237943f208&lt;br /&gt;
  Bison 3.8.2&lt;br /&gt;
&lt;br /&gt;
NEWS&lt;br /&gt;
&lt;br /&gt;
* Noteworthy changes in release 9.12 (2026-09-14) [stable]&lt;br /&gt;
&lt;br /&gt;
** Bug fixes&lt;br /&gt;
&lt;br /&gt;
  'chcon', 'chgrp', 'chmod', 'chown', 'du', 'ls' which traverse hierarchies with&lt;br /&gt;
  -R,  no longer fail merely because files may be being removed in parallel.&lt;br /&gt;
  [This bug was present in "the beginning".]&lt;br /&gt;
&lt;br /&gt;
  'comm - -' no longer closes standard input twice.  Previously it would&lt;br /&gt;
  mistakenly exit with a nonzero status.&lt;br /&gt;
  [This bug was present in "the beginning".]&lt;br /&gt;
&lt;br /&gt;
  'cp', 'install', and 'mv' now fall back to a standard copy&lt;br /&gt;
  if a --reflink=auto clone fails due to EDQUOT, ENOMEM, or ENOSPC.&lt;br /&gt;
  E.g., with XFS, a clone can exhaust metadata space in an allocation&lt;br /&gt;
  group, while a standard copy works.&lt;br /&gt;
  [bug introduced in coreutils-9.2]&lt;br /&gt;
&lt;br /&gt;
  'cut -d' with multiple multi-byte delimiter options specified&lt;br /&gt;
  will correctly match the last delimiter specified.&lt;br /&gt;
  [bug introduced with multi-byte support in coreutils-9.11]&lt;br /&gt;
&lt;br /&gt;
  'date -d '1-2-3' "+%_D"' no longer propagates flags like _ and - to the year&lt;br /&gt;
  component of the %D date specifier, keeping consistent component formatting.&lt;br /&gt;
  [bug introduced in coreutils-8.31]&lt;br /&gt;
&lt;br /&gt;
  'du --max-depth=N' now exits with a nonzero exit status and an error message&lt;br /&gt;
  if N is negative.  Previously it behaved as if N were zero.&lt;br /&gt;
  [bug introduced in coreutils-9.4]&lt;br /&gt;
&lt;br /&gt;
  'factor' avoids a buffer over-read (CWE-126) for certain values.&lt;br /&gt;
  [bug introduced in coreutils-9.8]&lt;br /&gt;
&lt;br /&gt;
  'head' and 'tail' now quote names in file headers when needed.&lt;br /&gt;
  [This bug was present in "the beginning".]&lt;br /&gt;
&lt;br /&gt;
  'ls --color' no longer reads freed memory when LS_COLORS sets "ln=target"&lt;br /&gt;
  and later becomes unparsable, e.g., LS_COLORS='ln=target:x'.&lt;br /&gt;
  [This bug was present in "the beginning".]&lt;br /&gt;
&lt;br /&gt;
  'mv' now warns when copying extended attributes fails with ENOTSUP, e.g., when&lt;br /&gt;
  moving files to a file system that does not support them.&lt;br /&gt;
  [bug introduced in coreutils-7.3]&lt;br /&gt;
&lt;br /&gt;
  'numfmt', 'printf', and 'seq' on Solaris, no longer output an extraneous e+00&lt;br /&gt;
  when using a large precision like "%.5119f".&lt;br /&gt;
  [This bug was present in "the beginning".]&lt;br /&gt;
&lt;br /&gt;
  'pinky -l' no longer no longer prints output in the incorrect order when&lt;br /&gt;
  standard output is fully buffered, e.g., when redirected to a file.&lt;br /&gt;
  [bug introduced in coreutils-9.10]&lt;br /&gt;
&lt;br /&gt;
  'pr' now exits gracefully upon exceeding internal accounting limits,&lt;br /&gt;
  like when processing large tab stops.&lt;br /&gt;
  [This bug was present in "the beginning".]&lt;br /&gt;
&lt;br /&gt;
  'ptx -G' no longer loops forever when the output width is smaller than&lt;br /&gt;
  twice the gap size, as with 'ptx -G -w4', or when a long reference&lt;br /&gt;
  leaves that little room, as with 'ptx -G -r'.&lt;br /&gt;
  [This bug was present in "the beginning".]&lt;br /&gt;
&lt;br /&gt;
  'ptx -W' no longer loops forever with a word regular expression that can&lt;br /&gt;
  match the empty string, like: echo ab | ptx -W 'a*'.&lt;br /&gt;
  [This bug was present in "the beginning".]&lt;br /&gt;
&lt;br /&gt;
  'shred' no longer blocks when opening a FIFO that has no readers.&lt;br /&gt;
  [This bug was present in "the beginning".]&lt;br /&gt;
&lt;br /&gt;
  'stty' no longer fails when the system uses speed encodings that&lt;br /&gt;
  are variations of the requested speed.&lt;br /&gt;
  [bug introduced in coreutils-9.8]&lt;br /&gt;
&lt;br /&gt;
  'tee' no longer loops infinitely after writing all output if a write call sets&lt;br /&gt;
  errno to EAGAIN.&lt;br /&gt;
  [bug introduced in coreutils-9.11]&lt;br /&gt;
&lt;br /&gt;
  'tee' no longer treats short writes as errors.&lt;br /&gt;
  [bug introduced in coreutils-9.11]&lt;br /&gt;
&lt;br /&gt;
  'test' no longer treats '-a' and '-o' as operators when given as strings to a&lt;br /&gt;
  binary operator.  E.g., 'test -a -a -a' exits successfully instead of exiting&lt;br /&gt;
  with an error.&lt;br /&gt;
  [This bug was present in "the beginning".]&lt;br /&gt;
&lt;br /&gt;
  'truncate --reference=R' no longer hangs when R is a FIFO with no readers.&lt;br /&gt;
  [bug introduced in coreutils-8.17]&lt;br /&gt;
&lt;br /&gt;
  'unexpand -t' no longer overflows a heap buffer, for tab values &amp;gt; SIZE_MAX/16,&lt;br /&gt;
  or with multi-byte blank characters longer than the tab value.&lt;br /&gt;
  [bugs introduced in coreutils-9.11]&lt;br /&gt;
&lt;br /&gt;
  'uniq -w' no longer overruns the read buffer in multibyte locales.&lt;br /&gt;
  [bug introduced in coreutils-9.5]&lt;br /&gt;
&lt;br /&gt;
  'wc' no longer reads past the end of a lookup table in legacy multibyte&lt;br /&gt;
  locales like SHIFT-JIS where a single byte can decode to a wide character.&lt;br /&gt;
  [bug introduced in coreutils-9.5]&lt;br /&gt;
&lt;br /&gt;
  Messages from Gnulib are no longer mistranslated in non-English locales.&lt;br /&gt;
  [bug introduced in coreutils-9.6]&lt;br /&gt;
&lt;br /&gt;
** New Features&lt;br /&gt;
&lt;br /&gt;
  'env' now supports --env0-from=FILE to read NUL-delimited environment entries&lt;br /&gt;
  from a file.  With -i, entries are preserved exactly, allowing full&lt;br /&gt;
  round-tripping of environments containing duplicate or nonstandard entries.&lt;br /&gt;
&lt;br /&gt;
  'stat' and 'tail' now know about the "failfs" and "nullfs" file system types.&lt;br /&gt;
  stat -f -c%T now reports the file system type,&lt;br /&gt;
  and tail -f uses inotify for these file systems.&lt;br /&gt;
&lt;br /&gt;
  uname adds the -A,--all-labeled option to label all output, one item per line.&lt;br /&gt;
&lt;br /&gt;
** Changes in behavior&lt;br /&gt;
&lt;br /&gt;
  'env' and 'printenv' now quote printed environment variables honoring the&lt;br /&gt;
  QUOTING_STYLE environment variable, defaulting to shell-escape style. This&lt;br /&gt;
  avoids printing arbitrary data to the terminal and allows the output to be&lt;br /&gt;
  sourced by a POSIX shell.&lt;br /&gt;
&lt;br /&gt;
  'ls' -w,--width no longer includes '\n' in the width of a line.&lt;br /&gt;
  I.e., the width or $COLUMNS is interpreted to be an _inclusive_ maximum.&lt;br /&gt;
&lt;br /&gt;
  'stat' now uses shell quoting when required, to more robustly escape&lt;br /&gt;
  file names.  Previously it only quoted file names with the %N format.&lt;br /&gt;
  The default quoting honors the QUOTING_STYLE env variable (like %N).&lt;br /&gt;
  Also %Qn is a newly supported format combination to quote file names,&lt;br /&gt;
  leaving the existing %n format for when quoting is not desired.&lt;br /&gt;
&lt;br /&gt;
** Improvements&lt;br /&gt;
&lt;br /&gt;
  When built with the configure option '--with-wtmpdb', invocations of&lt;br /&gt;
  'who /var/log/wtmp' and 'users /var/log/wtmp' use the wtmpdb database&lt;br /&gt;
  instead of the file /var/log/wtmp.  This makes them Y2038-safe.&lt;br /&gt;
&lt;br /&gt;
  'cut -w' operates more efficiently when extracting the start of a line&lt;br /&gt;
  in multi-byte locales, giving 4x more throughput with typical input.&lt;br /&gt;
&lt;br /&gt;
  'df', 'du', 'ls', 'od', 'pr', and 'sort' now escape invalid arguments in error&lt;br /&gt;
  messages for options expecting an integer.&lt;br /&gt;
&lt;br /&gt;
  'env -0, and 'printenv -0' now explicitly set binary mode on output&lt;br /&gt;
  so that no CRLF translation is done e.g., on windows.&lt;br /&gt;
&lt;br /&gt;
  'install -C' will now avoid updating file metadata when the destination&lt;br /&gt;
  already has the appropriate ownership and permissions.&lt;br /&gt;
&lt;br /&gt;
  'basename', 'dirname', 'du', 'readlink', and 'realpath' now quote output in&lt;br /&gt;
  shell-escape style when standard output is a terminal.  The QUOTING_STYLE&lt;br /&gt;
  environment variable can be used to adjust or disable the quoting.&lt;br /&gt;
&lt;br /&gt;
  'ls -m' now quotes files names containing commas when appropriate,&lt;br /&gt;
  so users can better distinguish separating commas.&lt;br /&gt;
&lt;br /&gt;
  'ls' now replaces newlines in file names if ambiguous with separators.&lt;br /&gt;
  Previously newlines were protected only when outputting to a terminal.&lt;br /&gt;
&lt;br /&gt;
  'sort' will now better use available memory and parallel operation&lt;br /&gt;
  when reading from unknown sized inputs like pipes.&lt;br /&gt;
&lt;br /&gt;
  'uniq -c' now operates up to 2.5x times faster on systems with unlocked stdio&lt;br /&gt;
  functions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
** Build-related&lt;br /&gt;
&lt;br /&gt;
  'logname' now builds, where getlogin() is replaced (e.g. with musl),&lt;br /&gt;
  and systemd libs are being used, by linking the required libraries.&lt;br /&gt;
&lt;br /&gt;
  The multi-call binary built with configure --enable-single-binary is reduced&lt;br /&gt;
  in size by around 10KB through the more efficient reuse of the 'test' code&lt;br /&gt;
  by '[', and the 'true' code by 'false'.&lt;br /&gt;
&lt;br /&gt;
  configure no longer accepts the --with-linux-crypto option, which allowed&lt;br /&gt;
  cksum, md5sum, and sha*sum to use the Linux AF_ALG API.  This API will be&lt;br /&gt;
  deprecated in Linux 7.2 and is less performant than OpenSSL.&lt;br /&gt;
&lt;br /&gt;
  The configure option '--enable-systemd' is renamed to '--with-systemd'.&lt;br /&gt;
  The option '--enable-systemd' was a misnomer and is now deprecated.&lt;br /&gt;
&lt;br /&gt;
  The 'sort' binary now uses the UAPI Group's .note.dlopen ELF note&lt;br /&gt;
  to indicate its dependency on libcrypto.&lt;br /&gt;
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Mon, 14 Sep 2026 15:55:48 +0000</pubDate>

</item> 
<item>
	<title>GNU Guix: Demystifying complex configurations</title>
	<guid>https://guix.gnu.org/blog/2026/demystifying-complex-configurations//</guid>
	<link>https://guix.gnu.org/blog/2026/demystifying-complex-configurations//</link>
     <description>  &lt;p&gt;Guix system and Guix home introduce the concept of services. These provide users
with a way to control background processes, commonly refereed as
&lt;a href="https://en.wikipedia.org/wiki/Daemon_(computing)"&gt;daemons&lt;/a&gt;, as well as ways of
controlling the setup of files. For example,
&lt;a href="https://guix.gnu.org/manual/devel/en/html_node/Networking-Services.html#index-openssh_002dservice_002dtype"&gt;&lt;code&gt;openssh-service-type&lt;/code&gt;&lt;/a&gt;
is a service which controls a &lt;a href="https://en.wikipedia.org/wiki/Secure_Shell"&gt;SSH&lt;/a&gt;
daemon. In contrast,
&lt;a href="https://guix.gnu.org/manual/devel/en/html_node/Service-Reference.html#index-etc_002dservice_002dtype"&gt;&lt;code&gt;etc-service-type&lt;/code&gt;&lt;/a&gt;
is a service that populates the contents of the &lt;code&gt;/etc&lt;/code&gt; directory.&lt;/p&gt;&lt;p&gt;One peculiarity of Guix services is that it's customary to provide Scheme
bindings for the different fields. By that I mean that the different fields of
the configuration of most services will be a type. The benefit of this is that
users get a uniform configuration language for their services, at the cost of
additional complexity when developing the service. Which is why, for a long
time, Guix users seem to struggle with defining complex configurations. There
are a number of reasons for this, we will try to close the gap today by going
through defining a configuration for
&lt;a href="https://gitlab.com/shackra/goimapnotify"&gt;Goimapnotify&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;This blog post assumes that the reader is somewhat familiar with Guix and knows
how to setup a development environment for it. If that's not the case, read &lt;a href="https://guix.gnu.org/manual/devel/en/html_node/The-Perfect-Setup.html"&gt;The
Perfect
Setup&lt;/a&gt;
and &lt;a href="https://guix.gnu.org/manual/devel/en/html_node/Using-Guix-Interactively.html"&gt;Using Guix
interactively&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;A Goimapnotify configuration is written in
&lt;a href="https://en.wikipedia.org/wiki/YAML"&gt;YAML&lt;/a&gt;. Therefore, we will need to serialize
the different Guile Scheme fields to this format. Let's take the example
configuration that the author gives in the project's
&lt;a href="https://gitlab.com/shackra/goimapnotify/-/blob/master/README.md"&gt;&lt;code&gt;README.md&lt;/code&gt;&lt;/a&gt;:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-yaml"&gt;configurations:
  -
    host: example.com
    port: 143
    tls: true
    tlsOptions:
      rejectUnauthorized: false
      starttls: true
    idleLogoutTimeout: 15
    username: USERNAME
    alias: ExampleCOM
    password: PASSWORD
    xoAuth2: false
    boxes:
      -
        mailbox: INBOX
        onNewMail: 'mbsync examplecom:INBOX'
        onChangedMail: 'mbsync examplenet:INBOX'
        onChangedMailPost: SKIP
        onNewMailPost: SKIP
  -
    hostCMD: COMMAND_TO_RETRIEVE_HOST
    port: 993
    tls: true
    tlsOptions:
      rejectUnauthorized: true
      starttls: true
    username: ''
    usernameCMD: ''
    password: ''
    passwordCMD: ''
    xoAuth2: false
    onNewMail: ''
    onNewMailPost: ''
    onChangedMail: ''
    onChangedMailPost: ''
    onDeletedMail: ''
    onDeletedMailPost: ''
    boxes:
      -
        mailbox: INBOX
        onNewMail: 'mbsync examplenet:INBOX'
        onNewMailPost: SKIP
        onChangedMail: 'mbsync examplenet:INBOX'
      -
        mailbox: Junk
        onNewMail: 'mbsync examplenet:Junk'
        onNewMailPost: SKIP&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Just by looking at the hierarchy we can already envision how to organize our
scheme records. We will need the following:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;home-goimapnotify-configuration-fields&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;goimapnotify-configuration&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;goimapnotify-box-configuration&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;goimapnotify-tls-options-configuration&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The final configuration that the service for Goimapnotify will rely on, will be
&lt;code&gt;home-goimapnotify-configuration-fields&lt;/code&gt;. It will contain a &lt;code&gt;configurations&lt;/code&gt;
field where each item will be a &lt;code&gt;goimapnotify-configuration&lt;/code&gt;; each box in those
configurations will be a &lt;code&gt;goimapnotify-box-configuration&lt;/code&gt;. Additionally, each of
those configurations will have an optional
&lt;code&gt;goimapnotify-tls-options-configuration&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;The &lt;code&gt;(gnu services configuration)&lt;/code&gt; module provides us with the API that we need
to define these configurations. The most important helpers for defining
configurations are:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;code&gt;define-configuration&lt;/code&gt;: For configurations that need to serialize fields into
a different format, generally configuration files.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;code&gt;define-configuration/no-serialization&lt;/code&gt;: For configurations that do not need
to emit any files. Generally all the fields are consumed by the Shepherd
services that rely on the configuration but no translation from Scheme to a
different format is needed.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;In our case, we need to translate the different configuration fields to YAML, so
we will need to use &lt;code&gt;define-configuration&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;The following sections are written so you can follow along, you are encouraged
to drop into a REPL (short for &lt;a href="https://guix.gnu.org/manual/devel/en/html_node/Using-Guix-Interactively.html"&gt;&lt;em&gt;read-eval-print
loop&lt;/em&gt;&lt;/a&gt;)
and import the required module:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;,use (gnu services configuration)&lt;/code&gt;&lt;/pre&gt;&lt;h1&gt;&lt;code&gt;goimapnotify-tls-options-configuration&lt;/code&gt;&lt;/h1&gt;&lt;p&gt;To make it easy for ourselves, we will start form the in-out, after all, you
wouldn't want to build a house from the rooftop, would you?&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;(define-configuration goimapnotify-tls-options-configuration
  (reject-unauthorized?
   (boolean #f)
   "Whether to reject unauthorized TLS certificates.")

  (starttls?
   (boolean #f)
   "Whether to use STARTTLS.")

  (prefix goimapnotify-))&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&lt;p&gt;evaluating the above snippet will throw an unbound variable exception, bear
with me.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Refer to &lt;a href="https://guix.gnu.org/manual/devel/en/html_node/Complex-Configurations.html"&gt;the
manual&lt;/a&gt;
for an in-depth explanation of the syntax of &lt;code&gt;define-configuration&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;The first argument is the name of the configuration object,
&lt;code&gt;goimapnotify-tls-options-configuration&lt;/code&gt; in this case. After it, we define the
different typed fields. We are defining boolean fields that are, by default, set
to false. The biggest source of confusion when defining configurations comes
because &lt;code&gt;define-configuration&lt;/code&gt; is a macro that introduces identifiers that do
not appear in the source code—it's an &lt;a href="https://doc.guix.gnu.org/guile/latest/en/html_node/Syntax-Rules.html#Hygiene"&gt;&lt;em&gt;unhygienic
macro&lt;/em&gt;&lt;/a&gt;. That
means that the macro will expand to code which defines symbols that are not
visible when reading the source file.&lt;/p&gt;&lt;p&gt;One can inspect the expansion of the macro by using the
&lt;a href="https://doc.guix.gnu.org/guile/latest/en/html_node/Compile-Commands.html#index-expand"&gt;,expand&lt;/a&gt;
REPL command. It will be quite verbose, so don't try to read all of it, instead
search through it; you will find some revealing things, such as:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;scheme@(gnu home services mail)&amp;gt; ,expand (define-configuration goimapnotify-tls-options-configuration
  (reject-unauthorized?
   (boolean #f)
   "Whether to reject unauthorized TLS certificates.")
  (starttls?
   (boolean #f)
   "Whether to use STARTTLS.")
  (prefix goimapnotify-))
$20 = (begin ...
        (define goimapnotify-tls-options-configuration? ...)
        (define goimapnotify-tls-options-configuration-reject-unauthorized? ...)
        (define goimapnotify-tls-options-configuration-starttls? ...)
        ...
        (define &amp;lt;goimapnotify-tls-options-configuration&amp;gt; ...)
        ...
        (define goimapnotify-tls-options-configuration ...)
        (define goimapnotify-tls-options-configuration-fields
          ((@@ (gnu services configuration) list)
           (let* ((name (let ((x 'reject-unauthorized?)) x)) ...
                  (serializer (let ((x goimapnotify-serialize-boolean)) x)) ...)
             ...)
           (let* ((name (let ((x 'starttls?)) x)) ...
                  (serializer (let ((x goimapnotify-serialize-boolean)) x)) ...)
             ...))))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In the previous snippet, &lt;code&gt;...&lt;/code&gt; represents omitted code. As you can see from the
macro expansion, &lt;code&gt;define-configuration&lt;/code&gt; introduces quite a few identifiers. You
may recognize the shared &lt;code&gt;prefix&lt;/code&gt; in those identifiers, that's right, it's the
prefix specified by that last field that we didn't explain from the
configuration definition, &lt;code&gt;(prefix goimapnotify-)&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;By inspecting the macro expansion, it's easy to understand what happens under
the hood. When a prefix is specified, we instruct the macro to append that
prefix to all the generated identifiers. This is useful to avoid naming
collisions; for example, when defining the configuration in a module with other
configuration records that serialize to different formats. After all, it's not
the same to serialize to YAML than to
&lt;a href="https://en.wikipedia.org/wiki/INI_file"&gt;INI&lt;/a&gt;, or any other format a tool may
require.&lt;/p&gt;&lt;p&gt;Remember that unbound variable problem I mentioned before? If you paid close
attention to the macro expansion, you may have noticed those references to
&lt;code&gt;goimapnotify-serialize-boolean&lt;/code&gt;, those are our unbound variables. The macro
expects us to define these serialization procedures, let's do that.&lt;/p&gt;&lt;h2&gt;Defining the missing serializers&lt;/h2&gt;&lt;p&gt;Since the configuration machinery knows nothing about the output format, we must
define how this translation happens. In our case, we are translating to YAML. By
looking at the example configuration provided by the Goimapnotify developers, we
can see that the field names are written in camel case, and their respective
values are separated from the names through the &lt;code&gt;:&lt;/code&gt; character.&lt;/p&gt;&lt;h3&gt;Helpers&lt;/h3&gt;&lt;p&gt;Let's start by making a function that takes a symbol and transforms it into a
string that's a camelized version of that symbol. We will use
&lt;code&gt;object-&amp;gt;camel-case-string&lt;/code&gt; from the &lt;code&gt;(gnu home services utils)&lt;/code&gt; module:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;,use (gnu home services utils)&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;(define (camelize-field-name field-name)
  (let ((str (object-&amp;gt;camel-case-string field-name)))
    (if (string-suffix? "?" str)
        (string-drop-right str 1)
        str)))
;; Usage: (camelize-field-name 'reject-unauthorized?) =&amp;gt; "rejectUnauthorized"&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In YAML, there is no convention of suffixing booleans with a &lt;code&gt;?&lt;/code&gt;, so our
camelizer drops it when found.&lt;/p&gt;&lt;p&gt;&lt;code&gt;camelize-field-name&lt;/code&gt; gives us a field name, but we want to serialize the value
too. Let's define a field serialization procedure to help us:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;(define (goimapnotify-serialize-field field-name val)
  "The mapping is used to serialize certain FIELD-NAMES specially."
  (let* ((field-name-mapping '((host-command . hostCmd)
                               (user-name . username)
                               (user-name-command . usernameCmd)
                               (password-command . passwordCmd)))
         (field-name* (or (assq-ref field-name-mapping field-name)
                          field-name)))
    (format #f "~a: ~s~%"
              (camelize-field-name field-name*)
              val)))
;; Usage: (goimapnotify-serialize-field 'reject-unauthorized? 'true) =&amp;gt; "rejectUnauthorized: true\n"&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Notice how we introduced &lt;code&gt;field-name-mapping&lt;/code&gt; to tailor the field name passed to
&lt;code&gt;camelize-field-name&lt;/code&gt; to emit the specific naming that Goimapnotify expects. In
Guix, we have a specific naming convention, so we want fields like &lt;code&gt;user-name&lt;/code&gt;
to map to &lt;code&gt;username&lt;/code&gt; (instead of &lt;code&gt;userName&lt;/code&gt;) and fields like &lt;code&gt;password-command&lt;/code&gt;
to map to &lt;code&gt;passwordCmd&lt;/code&gt; (instead of &lt;code&gt;passwordCommand&lt;/code&gt;).&lt;/p&gt;&lt;p&gt;That's enough to serialize most values to YAML, but there's an extra
Guix-specific feature we should make use of to make the service more convenient
to users:
&lt;a href="https://guix.gnu.org/manual/devel/en/html_node/G_002dExpressions.html"&gt;G-Expressions&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Are you familiar with them? If not, I encourage you to read this wonderful
trilogy of blog posts: &lt;a href="https://guix.gnu.org/en/blog/tags/dissecting-guix"&gt;Dissecting
Guix&lt;/a&gt;. It took me some time
to wrap my head around these concepts, but once you do, I think you will like
them too. In any case, that serializer is using those expressions because we
want users of our configuration to be able to intermingle packages and other
file-like objects in their fields.  Since this is a blog post about writing
configurations, I won't dive deep into G-Expressions, but let's try to get you a
sense for them.&lt;/p&gt;&lt;p&gt;You will need to import &lt;code&gt;(guix gexp)&lt;/code&gt; for the following snippet to work.&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;(define (goimapnotify-serialize-field field-name val)
  "The mapping is used to serialize certain FIELD-NAMES specially."
  (let* ((field-name-mapping '((host-command . hostCmd)
                               (user-name . username)
                               (user-name-command . usernameCmd)
                               (password-command . passwordCmd)))
         (field-name* (or (assq-ref field-name-mapping field-name)
                          field-name)))
    #~(format #f "~a: ~s~%"
              #$(camelize-field-name field-name*)
              #$val)))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;That's not so bad, is it? What was that? 6 more characters? Surely you wouldn't
be scared of that, but just in case, let me give you some extra reassurance on
what's happening here. This G-Expression thing, also known as gexp, is just the
way you let Guix know that this code is for later. "When is later?", you may
wonder. Simplifying it, that "later" is when Guix knows where file-like objects
will be located in your disk; that long path on the store you may have seen
before.&lt;/p&gt;&lt;p&gt;For example, a package is a file-like object, so when you build the package Guix
will tell you where it was stored:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-shell"&gt;$ guix build cowsay
/gnu/store/gz170ppi2hxssp4h3yw5jh4gdw6x9ws0-cowsay-3.8.4&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Preceding an expression with &lt;code&gt;#~&lt;/code&gt; (or &lt;code&gt;gexp&lt;/code&gt;), one effectively tells Guix "don't
evaluate this code until you know what this expression should expand to". And
that other syntax, &lt;code&gt;#$&lt;/code&gt; (or &lt;code&gt;ungexp&lt;/code&gt;), is telling Guix to replace the file-like
object for its lowered representation, usually a path in the store. For a
package like &lt;code&gt;cowsay&lt;/code&gt;, that would be that
&lt;code&gt;/gnu/store/gz170ppi2hxssp4h3yw5jh4gdw6x9ws0-cowsay-3.8.4&lt;/code&gt; paths we saw before.&lt;/p&gt;&lt;p&gt;With that said, if you are like me, you won't be comfortable if you cannot debug
this expressions, so let me give you some supper powers.&lt;/p&gt;&lt;p&gt;In your REPL, import the &lt;code&gt;(guix)&lt;/code&gt; module. This will augment the REPL with some
additional commands that will simplify our life:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;scheme@(guile-user)&amp;gt; ,use (guix)
scheme@(guile-user)&amp;gt; ,help guix
Guix Commands [abbrev]:

 ,run-in-store EXP                 - Run EXP through the store monad.
 ,verbosity LEVEL                  - Change build verbosity to LEVEL.
 ,lower OBJECT                     - Lower OBJECT into a derivation or store file and return it.
 ,build OBJECT [BUILD-MODE]        - Lower OBJECT and build it, returning its output file name(s).
 ,build-options OPTIONS            - Set build options to OPTIONS.  Print previous value (to allow easy restore).
 ,build-graft GRAFT?               - Set whether grafts should be performed.
 ,enter-store-monad                - Enter a REPL for values in the store monad.
 ,phases                           - Return the build phases of the package defined by FORM.
 ,configure-flags                  - Return the configure flags of the package defined by FORM.
 ,make-flags                       - Return the make flags of the package defined by FORM.&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Let's see what that gexp is up to:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;scheme@(gnu home services mail)&amp;gt; (goimapnotify-serialize-field 'reject-unauthorized? ''true)
$6 = #&amp;lt;gexp (format #f "~a: ~s\n" #&amp;lt;gexp-input "rejectUnauthorized":out&amp;gt; #&amp;lt;gexp-input (quote true):out&amp;gt;) gnu/home/services/mail.scm:252:2 7f4c7d9deb40&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;There is a little helper to approximate a gexp to it's output:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;scheme@(gnu home services mail)&amp;gt; (gexp-&amp;gt;approximate-sexp $6)
$7 = (format #f "~a: ~s\n" "rejectUnauthorized" (quote true))
scheme@(gnu home services mail)&amp;gt; (primitive-eval $7)
$8 = "rejectUnauthorized: true\n"&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;That gets us an idea of what will be emitted to disk, but for more complex
procedures, this is not going to cut it, specially if there are multiple gexps
combined. So let's build that gexp:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;;; 'gexp-&amp;gt;file' comes from the '(guix gexp)' module. You can ask the REPL more
;; information about a symbol through ',a SYMBOL'.
scheme@(gnu home services mail)&amp;gt; ,a gexp-&amp;gt;file
(guix gexp): gexp-&amp;gt;file #&amp;lt;procedure gexp-&amp;gt;file (name exp #:key guile set-load-path? module-path splice? system target)&amp;gt;

scheme@(gnu home services mail)&amp;gt; (gexp-&amp;gt;file "test.scm" $6)
$8 = #&amp;lt;procedure 7f3f7d456ea0 at guix/gexp.scm:2098:2 (state)&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In order for Guix to build a value, it needs to be something Guix can lower—an
object that can be "compiled" down to a file in the store (these are referred to
as file-like objects, because they can be inserted in any piece of code that
expects a file name). A gexp cannot be built by itself, because there is nowhere
to output it to. The above snippet creates a file-like object that will be
emitted to a file named &lt;code&gt;test.scm&lt;/code&gt; in the store. That file will contain our
expression. As you see, we've got a procedure. The REPL printer tells us that
this procedure needs some &lt;code&gt;state&lt;/code&gt;; this is just a way of indicating you that
this is a monadic procedure that can only be run in the context of a store
connection. Read &lt;a href="https://guix.gnu.org/manual/devel/en/html_node/The-Store-Monad.html"&gt;The Store
Monad&lt;/a&gt; for
more information.&lt;/p&gt;&lt;p&gt;I will build it manually just once for demonstration purposes, don't blink:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;scheme@(gnu home services mail)&amp;gt; ,use (guix store)
scheme@(gnu home services mail)&amp;gt; (run-with-store (open-connection)
                                   $8)
$9 = #&amp;lt;derivation /gnu/store/gq71r3sgilfvsicfnifln8n0wfksam13-test.scm.drv =&amp;gt; /gnu/store/c3hxw7pgnxchw1zldnc9nrb8iwwrqf78-test.scm 7f3f7e2de000&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Where we are saying "run the procedure we got in the context of a store
connection", we opened that connection through &lt;code&gt;open-connection&lt;/code&gt;. Let's not do
that again... Fortunately we have those useful REPL commands I just told you
about, so we can archive the same result by doing this:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;scheme@(gnu home services mail)&amp;gt; ,run-in-store $8
$10 = #&amp;lt;derivation /gnu/store/gq71r3sgilfvsicfnifln8n0wfksam13-test.scm.drv =&amp;gt; /gnu/store/c3hxw7pgnxchw1zldnc9nrb8iwwrqf78-test.scm 7fcd92f7f0f0&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;That's better, isn't it?&lt;/p&gt;&lt;p&gt;Now, this is a
&lt;a href="https://guix.gnu.org/manual/devel/en/html_node/Derivations.html"&gt;derivation&lt;/a&gt;.
That's something Guix can build:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;scheme@(gnu home services mail)&amp;gt; ,build $10
building /gnu/store/gq71r3sgilfvsicfnifln8n0wfksam13-test.scm.drv...
$11 = "/gnu/store/c3hxw7pgnxchw1zldnc9nrb8iwwrqf78-test.scm"&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;What's that? You don't want this magic command? Okay, the same thing can be done
with:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;scheme@(gnu home services mail)&amp;gt; (run-with-store (open-connection)
                                   (built-derivations (list $10)))
$12 = #t
scheme@(gnu home services mail)&amp;gt; (derivation-&amp;gt;output-path $10)
$13 = "/gnu/store/c3hxw7pgnxchw1zldnc9nrb8iwwrqf78-test.scm"&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;At last, a file! What's in there?&lt;/p&gt;&lt;pre&gt;&lt;code class="language-shell"&gt;$ cat /gnu/store/c3hxw7pgnxchw1zldnc9nrb8iwwrqf78-test.scm
(format #f "~a: ~a\n" "rejectUnauthorized" "true")&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Okay that seems about right. We can even run it:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;scheme@(gnu home services mail)&amp;gt; (call-with-input-file $13
                                   (lambda (port)
                                     (primitive-eval (read port))))
$14 = "rejectUnauthorized: true\n"&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You've seen the secret sauce, let's continue with what brought us here.&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;(define (goimapnotify-serialize-boolean field-name val)
  (goimapnotify-serialize-field field-name (if val ''true ''false)))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;With this our configuration won't complain about the missing serializer.  Let's
continue.&lt;/p&gt;&lt;p&gt;One last thing, notice how, after moving to the gexp version of
&lt;code&gt;goimapnotify-serialize-field&lt;/code&gt;, we started double quoting the symbols &lt;code&gt;true&lt;/code&gt; and
&lt;code&gt;false&lt;/code&gt;, this is because the &lt;code&gt;#$&lt;/code&gt; syntax will replace the value in place, and
the value of &lt;code&gt;'true&lt;/code&gt; is &lt;code&gt;true&lt;/code&gt;, without the quote. If we didn't double quote,
the staged code after expansion would look like this:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;(format #f "~a: ~s\n" "rejectUnauthorized" true)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;When what we really want is to expand to this:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;(format #f "~a: ~s\n" "rejectUnauthorized" 'true)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The reason for this is that we want users to be able to write staged code on the
different fields. If one of the values of a field where to be something like
this:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;(goimapnotify-serialize-field 'favorite-game #~(string-append #$cowsay "/bin/cowsay"))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The expansion would be this:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;(format #f "~a: ~s\n" "favoriteGame" (string-append "/gnu/store/gz170ppi2hxssp4h3yw5jh4gdw6x9ws0-cowsay-3.8.4" "/bin/cowsay"))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The &lt;code&gt;string-append&lt;/code&gt; procedure is evaluated right before the &lt;code&gt;format&lt;/code&gt; call, not
when the gexp is getting lowered.&lt;/p&gt;&lt;h2&gt;Serializing&lt;/h2&gt;&lt;p&gt;The &lt;code&gt;(gnu services configuration)&lt;/code&gt; module we imported earlier provides us with
&lt;code&gt;serialize-configuration&lt;/code&gt;, it takes two arguments, a configuration object and the
fields that compose that configuration.&lt;/p&gt;&lt;p&gt;The &lt;code&gt;define-configuration&lt;/code&gt; macro defined the
&lt;code&gt;goimapnotify-tls-options-configuration&lt;/code&gt; constructor for us, we can create a
configuration with the default values like this:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;scheme@(gnu home services mail)&amp;gt; (goimapnotify-tls-options-configuration)
$10 = #&amp;lt;&amp;lt;goimapnotify-tls-options-configuration&amp;gt; reject-unauthorized?: #f starttls?: #f %location: #f&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then, we can serialize it like this:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;scheme@(gnu home services mail)&amp;gt; (serialize-configuration $10 goimapnotify-tls-options-configuration-fields)
$11 = #&amp;lt;gexp  gnu/services/configuration.scm:165:2 7ff1fd2cbf60&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you recall form the macro expansion we saw earlier,
&lt;code&gt;goimapnotify-tls-options-configuration-fields&lt;/code&gt;, was one of those identifiers
that got generated.&lt;/p&gt;&lt;p&gt;You should already know how to build that gexp we've got:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;scheme@(gnu home services mail)&amp;gt; (gexp-&amp;gt;file "test.yaml" $11)
$12 = #&amp;lt;procedure 7efd8b10c2d0 at guix/gexp.scm:2098:2 (state)&amp;gt;
scheme@(gnu home services mail)&amp;gt; ,use (guix)
scheme@(gnu home services mail)&amp;gt; ,run-in-store $12
$13 = #&amp;lt;derivation /gnu/store/z59sf3nhh80668z8njljfxcymgi071pr-test.yaml.drv =&amp;gt; /gnu/store/xam1210yl1vdxix0bgpfalf6drpv6xbx-test.yaml 7efd8a80fd70&amp;gt;
scheme@(gnu home services mail)&amp;gt; ,build $13
$14 = "/gnu/store/xam1210yl1vdxix0bgpfalf6drpv6xbx-test.yaml"
scheme@(gnu home services mail)&amp;gt; (call-with-input-file $14
                                   (lambda (port)
                                     (display (primitive-eval (read port)))))
rejectUnauthorized: false
starttls: false&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;That's some nice YAML syntax... We better speed up the pace or I will retire
before finishing up this blog post.&lt;/p&gt;&lt;h1&gt;&lt;code&gt;goimapnotify-box-configuration&lt;/code&gt;&lt;/h1&gt;&lt;p&gt;Next in line is &lt;code&gt;goimapnotify-box-configuration&lt;/code&gt;, you know the drill. We start
by declaring the configuration with &lt;code&gt;define-configuration&lt;/code&gt;, specifying each
field name, type and docstring:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;(define-configuration goimapnotify-box-configuration
  (mailbox
   string
   "The mailbox to monitor.")

  (on-new-mail
   maybe-string-or-gexp
   "The command to execute when new mail arrives.")

  (on-new-mail-post
   maybe-string-or-gexp
   "The command to execute after the new-mail command.")

  (on-changed-mail
   maybe-string-or-gexp
   "The command to execute when mail is changed.")

  (on-changed-mail-post
   maybe-string-or-gexp
   "The command to execute after the changed-mail command.")

  (on-deleted-mail
   maybe-string-or-gexp
   "The command to execute when mail is deleted.")

  (on-deleted-mail-post
   maybe-string-or-gexp
   "The command to execute after the deleted-mail command.")

  (prefix goimapnotify-))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You may have noticed that we have two new types. &lt;code&gt;strings&lt;/code&gt;, easy enough, and
&lt;code&gt;maybe-string-or-gexp&lt;/code&gt;, not so easy; right?  Worry not, here comes the
explanation.&lt;/p&gt;&lt;p&gt;Let's start by defining the string type:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;(define-maybe string (prefix msmtp-configuration-))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You may be very confused right now. What has &lt;code&gt;msmtp-configuration&lt;/code&gt; to do with
our &lt;code&gt;goimapnotify-configuration&lt;/code&gt; example? Well, I want this blog post to get you
ready for the real world, and in the wild, you will make configurations in
modules that contain other configurations. The example we are looking up today
is a narration of my adventures making the Goimapnotify service from the &lt;code&gt;(gnu services mail)&lt;/code&gt; module, in that module, there is already a configuration for
&lt;a href="https://guix.gnu.org/manual/devel/en/html_node/Mail-Home-Services.html#MSMTP-Service"&gt;msmtp&lt;/a&gt;.
With that said, if we tried to do this:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;(define-maybe string (prefix goimapnotify-))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We would be surprised with a warning that looks something like this:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-example"&gt;$ make
...
[ 94%] GUILEC   gnu/home/services/mail.go
gnu/home/services/mail.scm:67:0: warning: shadows previous definition of `maybe-string?' at gnu/home/services/mail.scm:63:0
gnu/home/services/mail.scm:278:0: warning: shadows previous definition of `goimapnotify-serialize-maybe-string' at gnu/home/services/mail.scm:67:0&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;That's unexpected, isn't it? Nothing we've seen so far points to a
&lt;code&gt;maybe-string?&lt;/code&gt; procedure, let's look at what is going under the hood of that
&lt;code&gt;define-maybe&lt;/code&gt; macro:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;scheme@(gnu home services mail)&amp;gt; ,expand (define-maybe string (prefix msmtp-configuration-))
$15 = (begin
        (define (maybe-string? val)
          (or ((@@ (gnu services configuration) not)
               ((@@ (gnu services configuration) maybe-value-set?) val))
              (string? val)))
        (define (msmtp-configuration-serialize-maybe-string field-name val)
          (if (string? val)
              (msmtp-configuration-serialize-string field-name val)
              "")))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Do you see it? The macro is expanding to some code that introduces two new
procedures into the module, one following the prefix, that would be
&lt;code&gt;msmtp-configuration-serialize-maybe-string&lt;/code&gt;, and one that just declares the
predicate for the maybe type.&lt;/p&gt;&lt;p&gt;Given that, the warning is now apparent. If we call again that macro with a
&lt;code&gt;string&lt;/code&gt; as the first argument, we will get the same predicate after the
expansion, leading to the redefinition warning.&lt;/p&gt;&lt;p&gt;So, for this particular case, instead of using the macro, we will define
manually the two procedures required for our configuration:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;;; The module already had this helper defined.
(define (string-or-gexp? obj)
  (or (string? obj)
      (gexp? obj)))

;; ... omitted lines ...

(define (goimapnotify-serialize-string field-name val)
  (goimapnotify-serialize-field field-name val))

(define (goimapnotify-serialize-maybe-string field-name val)
  (if (maybe-value-set? val)
      (goimapnotify-serialize-string field-name val)
      ""))

(define goimapnotify-serialize-string-or-gexp
  goimapnotify-serialize-string)

(define (goimapnotify-serialize-maybe-string-or-gexp field-name val)
  (if (and (maybe-value-set? val)
           (string-or-gexp? val))
      (goimapnotify-serialize-string-or-gexp field-name val)
      ""))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The above snippet defines all the serializers we need for the new types.  Notice
that they are just some simple wrappers around the
&lt;code&gt;goimapnotify-serialize-field&lt;/code&gt; helper. That procedure is doing all the heavy
lifting here, and fortunately for us, it already handles gexps. Therefore, the
fields that have a type that accepts a gexp are straightforward to declare.&lt;/p&gt;&lt;p&gt;That would be it for the &lt;code&gt;goimapnotify-box-configuration&lt;/code&gt; declaration. As showed
in the previous section, the REPL is your friend. I had never written such a
complex configuration before, but thanks to this &lt;a href="https://xkcd.com/297"&gt;"elegant weapon for a more
civilized age"&lt;/a&gt;, I could find my way by poking things
around.&lt;/p&gt;&lt;p&gt;Let's continue!&lt;/p&gt;&lt;h1&gt;&lt;code&gt;goimapnotify-configuration&lt;/code&gt;&lt;/h1&gt;&lt;p&gt;You know the drill, we start by defining the fields we need. Again, I'm doing
this just by looking at the README example provided by the developers of
Goimapnotify:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;(define-configuration goimapnotify-configuration
  (host
   string
   "The IMAP server hostname.")

  (host-command
   maybe-string-or-gexp
   "The command to retrieve the IMAP server hostname.")

  (port
   (integer 993)
   "The port that the IMAP server listens on.")

  (tls?
   (boolean #f)
   "Enable or disable TLS.")

  (tls-options
   maybe-goimapnotify-tls-options-configuration
   "TLS options for the IMAP connection."
   (serializer serialize-maybe-goimapnotify-tls-options-configuration))

  (idle-logout-timeout
   maybe-integer
   "The idle logout timeout in minutes.")

  (user-name
   maybe-string
   "The user-name for authentication.")

  (user-name-command
   maybe-string-or-gexp
   "The command to retrieve the user-name.")

  (alias
   maybe-string
   "An alias for the account.")

  (password
   maybe-string
   "The password for authentication.")

  (password-command
   maybe-string-or-gexp
   "The command to retrieve the password.")

  (xo-auth2?
   (boolean #f)
   "Enable or disable XOAUTH2 authentication.")

  (wait
   maybe-integer
   "The delay in seconds before the mail syncing is triggered.")

  (boxes
   list-of-goimapnotify-boxes-configurations
   "The mailboxes to monitor."
   (serializer serialize-list-of-goimapnotify-boxes-configurations))

  (prefix goimapnotify-))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You are already familiar with most of those types, but there are some new things
here:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;integer&lt;/code&gt; and &lt;code&gt;maybe-integer&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;maybe-goimapnotify-tls-options-configuration&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;list-of-goimapnotify-boxes-configurations&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Let's start with the obvious ones first.&lt;/p&gt;&lt;h2&gt;&lt;code&gt;integer&lt;/code&gt;&lt;/h2&gt;&lt;p&gt;The module already had a maybe definition for the integer. If you recall from
the macro expansion earlier, that means that there is already a symbol for the
predicate &lt;code&gt;maybe-integer?&lt;/code&gt;:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;(define-maybe integer (prefix msmtp-configuration-))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We still need a serializer that follows our prefix:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;(define (goimapnotify-serialize-integer field-name val)
  (goimapnotify-serialize-field field-name val))

(define (goimapnotify-serialize-maybe-integer field-name val)
  (if (maybe-value-set? val)
      (goimapnotify-serialize-integer field-name val)
      ""))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Simple enough. Moving on!&lt;/p&gt;&lt;h2&gt;&lt;code&gt;maybe-goimapnotify-tls-options-configuration&lt;/code&gt;&lt;/h2&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;(define (serialize-goimapnotify-tls-options-configuration field-name val)
  (let ((serialization (serialize-configuration val goimapnotify-tls-options-configuration-fields)))
    #~(begin
        (use-modules (ice-9 format) (ice-9 string-fun))
        (format #f "~a:
  ~a~%"
                '#$(camelize-field-name field-name)
                (string-replace-substring #$serialization "\n" "\n  ")))))

(define-maybe goimapnotify-tls-options-configuration)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You are already familiar with the &lt;code&gt;define-maybe&lt;/code&gt; macro. The serializer is also
quite simple. Since we already defined a record that contains within all the
required information to serialize it, we just need to make a simple wrapper
around &lt;code&gt;serialize-configuration&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;Before moving forward, notice how the serializers from this section doesn't
contain that &lt;code&gt;goimapnotify-&lt;/code&gt; prefix. This is an arbitrary decision, but since
there is already &lt;code&gt;goimapnotify&lt;/code&gt; in the symbol name, I think it's a bit redundant
to add it. For the configuration definition to know which serializer to use, we
have to be specific in the serializer argument of the fields, that's why in the
configuration we had this declaration specifying a &lt;code&gt;(serializer ...)&lt;/code&gt; for the
field:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;(define-configuration goimapnotify-configuration
  ;; ... omitted lines ...
  (tls-options
   maybe-goimapnotify-tls-options-configuration
   "TLS options for the IMAP connection."
   (serializer serialize-maybe-goimapnotify-tls-options-configuration))
  ;; ... omitted lines ...
  (prefix goimapnotify-))&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;&lt;code&gt;list-of-goimapnotify-boxes-configurations&lt;/code&gt;&lt;/h2&gt;&lt;p&gt;First we need a prefix to know if we have a list of
&lt;code&gt;goimapnotify-box-configuration&lt;/code&gt; objects, that one is simple:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;(define (list-of-goimapnotify-boxes-configurations? lst)
  (and (not (null? lst))
       (every goimapnotify-box-configuration? lst)))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now we need a serializer that knows how to handle a list of these objects:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;(define (serialize-list-of-goimapnotify-boxes-configurations field-name value)
  (let ((serializations (cons 'list
                              (map (cut serialize-configuration &amp;lt;&amp;gt;
                                        goimapnotify-box-configuration-fields)
                                   value))))
    #~(begin
        (use-modules (ice-9 format) (ice-9 string-fun))
        (format #f "~a:
~{  - ~a~%~}"
                '#$(camelize-field-name field-name)
                (map (lambda (s)
                       (string-replace-substring s "\n" "\n    "))
                     #$serializations)))))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Looks a bit daunting, but it's just staged code, remember our earlier
explanation of gexps. This code is only constructing a string with the shape we
need.&lt;/p&gt;&lt;p&gt;As a reminder, we are serializing to YAML, that means that lists are prefixed by
a &lt;code&gt;-&lt;/code&gt; character. Following the Goimapnotify README, the indentation would be
something like this:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;boxes:
  - mailbox: INBOX
    onNewMail: 'mbsync examplenet:INBOX'
    onNewMailPost: SKIP
    onChangedMail: 'mbsync examplenet:INBOX'
  - mailbox: Junk
    onNewMail: 'mbsync examplenet:Junk'
    onNewMailPost: SKIP&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This is what that &lt;code&gt;format&lt;/code&gt; call is doing. Refer to
&lt;a href="https://doc.guix.gnu.org/guile/latest/en/html_node/Formatted-Output.html"&gt;Formatted-Output&lt;/a&gt;
for more information.&lt;/p&gt;&lt;p&gt;We are only lacking a way to generate a complete configuration, remember that
&lt;code&gt;goimapnotify-configuration&lt;/code&gt; is an object for a single configuration. According
to the README of Goimapnotify, the configuration file can take a list of
configurations.&lt;/p&gt;&lt;h1&gt;&lt;code&gt;home-goimapnotify-configuration&lt;/code&gt;&lt;/h1&gt;&lt;p&gt;This is the last configuration we will need, it will be used directly by the
service:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;(define-configuration home-goimapnotify-configuration
  (goimapnotify
   (file-like goimapnotify)
   "The @code{goimapnotify} package to use."
   empty-serializer)
  (configurations
   (list-of-goimapnotify-configurations)
   "A list of @code{goimapnotify-configuration} records which contain
information about all your accounts configurations."))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Simple enough, the first field is the Guix package that provides the
&lt;code&gt;goimapnotify&lt;/code&gt; program. This one is used by the service to start the
process. Since it doesn't need to appear in any configuration file, we don't
need to serialize it, hence the &lt;code&gt;empty-serializer&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;On last serializer:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;(define (serialize-list-of-goimapnotify-configurations field-name value)
  (let ((serializations (cons 'list
                              (map (cut serialize-configuration &amp;lt;&amp;gt;
                                        goimapnotify-configuration-fields)
                                   value))))
    #~(begin
        (use-modules (ice-9 format) (ice-9 string-fun))
        (format #f "~a:
~{  - ~a~%~}"
                '#$(camelize-field-name field-name)
                (map (lambda (s)
                       (string-replace-substring s "\n" "\n    "))
                     #$serializations)))))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The rationale for this code is the same as the one explained for
&lt;code&gt;list-of-goimapnotify-boxes-configurations&lt;/code&gt;.&lt;/p&gt;&lt;h1&gt;Defining the Shepherd service&lt;/h1&gt;&lt;p&gt;The service definition; at last!&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;(define (home-goimapnotify-shepherd-service config)
  (let ((log-file #~(string-append %user-log-dir "/goimapnotify.log")))
    (list
     (shepherd-service
       (provision '(goimapnotify))
       (modules '((shepherd support)))   ;for '%user-log-dir'
       (documentation "Run a goimapnotify process")
       (start #~(make-forkexec-constructor
                 (list
                  #$(file-append
                     (home-goimapnotify-configuration-goimapnotify config)
                     "/bin/goimapnotify")
                  "-conf" #$(mixed-text-file "goimapnotify.yaml"
                                             (serialize-configuration config
                                                                      home-goimapnotify-configuration-fields)))
                 #:log-file #$log-file))
       (stop #~(make-kill-destructor))))))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Refer to &lt;a href="https://guix.gnu.org/manual/devel/en/html_node/Shepherd-Services.html"&gt;Shepherd
Services&lt;/a&gt;
for more information on how to write Shepherd services. I will only highlight
how to handle the configuration we just wrote.&lt;/p&gt;&lt;p&gt;We have already done all the hard work, the configuration declaration contains
all the information needed to perform the serialization of the different fields
to YAML, we just need to call &lt;code&gt;serialize-configuration&lt;/code&gt;. For example:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;scheme@(gnu home services mail)&amp;gt; (define test-config
  (home-goimapnotify-configuration
   (configurations
    (list
     (goimapnotify-configuration
      (host "test.example.com")
      (boxes
       (list
        (goimapnotify-box-configuration
         (mailbox "Test")))))))))

scheme@(gnu home services mail)&amp;gt; (serialize-configuration test-config home-goimapnotify-configuration-fields)
$6 = #&amp;lt;gexp  gnu/services/configuration.scm:165:2 7f3448e678a0&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;That serialization gives a gexp ready to be wrapped in a file-like so it can be
lowered to the store. That's what &lt;code&gt;mixed-text-file&lt;/code&gt; is doing:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;scheme@(gnu home services mail)&amp;gt; (mixed-text-file "goimapnotify.yaml"
                 (serialize-configuration test-config
                                          home-goimapnotify-configuration-fields))
$7 = #&amp;lt;&amp;lt;computed-file&amp;gt; name: "goimapnotify.yaml" gexp: #&amp;lt;gexp  guix/gexp.scm:2171:6 7f343915ef60&amp;gt; guile: #f options: (#:local-build? #t)&amp;gt;
scheme@(gnu home services mail)&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We've got ourselves a service, but there is one last thing before we go!&lt;/p&gt;&lt;h1&gt;Defining the service type&lt;/h1&gt;&lt;p&gt;As mentioned in the previous section, refer to &lt;a href="https://guix.gnu.org/manual/devel/en/html_node/Defining-Services.html"&gt;Defining
Services&lt;/a&gt;
for what's going on here. The last thing we need do is declare the relation that
this service has with respect to others:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-scheme"&gt;(define home-goimapnotify-service-type
  (service-type
    (name 'home-goimapnotify)
    (extensions
     (list (service-extension home-shepherd-service-type
                              home-goimapnotify-shepherd-service)))
    (description "Configures the @code{goimapnotify} IMAP Mailbox notifier.")))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We did it!&lt;/p&gt;&lt;h1&gt;Closing words&lt;/h1&gt;&lt;p&gt;Still here? That was long... But here we are, we defined our &lt;a href="https://guix.gnu.org/manual/devel/en/html_node/Complex-Configurations.html"&gt;&lt;strong&gt;complex
configuration&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Congratulations on reading till the end, by this time you should already be an
expert on defining Guix configurations.&lt;/p&gt;&lt;p&gt;We acknowledge that there are some improvements to do on the API for defining
configurations. We would like to have a way to specify symbol mapping for field
names in the declaration, so that serializers can be generalized better. It
would also be nice if we could refactor some of our configuration definitions so
the serializers that can be generalized are reused between declarations. After
all, there are many configuration files in similar formats.&lt;/p&gt;&lt;p&gt;For all of these improvements, we are counting on you! I wrote this blog post to
empower you to participate in the development. If this is something that
resonates with you, come join the fun!&lt;/p&gt; </description> 
	<pubDate>Mon, 07 Sep 2026 08:30:00 +0000</pubDate>

</item> 
<item>
	<title>Simon Josefsson: Soft-launching the DiffOS project</title>
	<guid>https://blog.josefsson.org/?p=2285</guid>
	<link>https://blog.josefsson.org/2026/09/04/soft-launching-the-diffos-project/</link>
     <description>  &lt;p class="wp-block-paragraph"&gt;Today marks the day of soft-launching of my Debian derivative, which I’ve been using on several of my own machines for the past year or so.  This is still work in progress, but I wanted to establish a launch date of the project so below is the DiffOS manifesto as motivation for continued work.&lt;/p&gt;



&lt;p class="wp-block-paragraph"&gt;&lt;a href="https://www.diffos.org/"&gt;DiffOS&lt;/a&gt; is For Freedom! &lt;a href="https://www.diffos.org/"&gt;DiffOS&lt;/a&gt; is the Debian Increment For Freedom Operating System.&lt;/p&gt;



&lt;ul class="wp-block-list"&gt;
&lt;li&gt;Aspire to the goals of &lt;a href="https://www.gnu.org/distros/free-system-distribution-guidelines.html"&gt;GNU FSDG&lt;/a&gt; and become a recognized &lt;a href="https://www.gnu.org/distros/free-distros.html"&gt;Free GNU/Linux distribution&lt;/a&gt;.&lt;/li&gt;



&lt;li&gt;Uses &lt;a href="https://www.debian.org/"&gt;Debian GNU/Linux&lt;/a&gt; as upstream.&lt;/li&gt;



&lt;li&gt;Support for all architectures supported by Debian.&lt;/li&gt;



&lt;li&gt;Provide Containers, Cloud Images, LiveCD and installer ISOs.&lt;/li&gt;



&lt;li&gt;Provide standalone hosting of the package repository.&lt;/li&gt;



&lt;li&gt;Provide documentation and issue tracker.&lt;/li&gt;



&lt;li&gt;Keep changes to a minimal, in particular:
&lt;ul class="wp-block-list"&gt;
&lt;li&gt;Upstream-first policy to prefer that any changes are made in Debian, and only if that fails they are considered for DiffOS.&lt;/li&gt;



&lt;li&gt;Binary package re-use for as much as is possible.&lt;/li&gt;



&lt;li&gt;Don’t modify any source-level Debian package unless &lt;em&gt;REQUIRED&lt;/em&gt; by the FSDG (e.g., for freedom concerns) or &lt;em&gt;REQUIRED&lt;/em&gt; by the Debian project (e.g., for branding reasons).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;



&lt;li&gt;Publish a list of packages that are added, removed or modified compared to Debian, with justification for each change.&lt;/li&gt;



&lt;li&gt;Publish &lt;a href="https://diffoscope.org/"&gt;Diffoscope&lt;/a&gt;-style outputs comparing our artifacts with comparable Debian artifact.&lt;/li&gt;



&lt;li&gt;Everything built from CI/CD pipelines, inspired by the &lt;a href="https://salsa.debian.org/salsa-ci-team/pipeline/"&gt;Salsa CI pipeline&lt;/a&gt; but extended to cover the package repository and installation images as well, to allow modern GitSecDevOps of the entire supply-chain.&lt;/li&gt;



&lt;li&gt;Use inspiration from other Debian-derived FSDG distributions &lt;a href="https://trisquel.info/"&gt;Trisquel GNU/Linux&lt;/a&gt; and &lt;a href="https://pureos.net/"&gt;PureOS&lt;/a&gt;, and broader with &lt;a href="https://guix.gnu.org/"&gt;GNU Guix&lt;/a&gt; especially on how to approach existing freedom concerns in packages.&lt;/li&gt;



&lt;li&gt;Git Forge agnostic. While currently hosted on GitLab.com, scripts and configuration are (or will be) designed to allow setup on self-hosted GitLab instance, &lt;a href="https://codeberg.org/"&gt;Codeberg.org&lt;/a&gt; or self-hosted &lt;a href="https://forgejo.org/"&gt;Forgejo&lt;/a&gt;.&lt;/li&gt;



&lt;li&gt;Maintained by Humans – &lt;a href="https://thehumanmanifesto.org/"&gt;THE HUMAN MANIFESTO FOR THE AGE OF ARTIFICIAL INTELLIGENCE&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;



&lt;p class="wp-block-paragraph"&gt;Happy Hacking!&lt;/p&gt; </description> 
	<pubDate>Fri, 04 Sep 2026 13:11:41 +0000</pubDate>

</item> 
<item>
	<title>parallel @ Savannah: GNU Parallel 20260822 ('Ceuta') released</title>
	<guid>https://savannah.gnu.org/news/?id=10930</guid>
	<link>https://savannah.gnu.org/news/?id=10930</link>
     <description>  &lt;p&gt;GNU Parallel 20260822 ('Ceuta') has been released. It is available for download at: lbry://@GnuParallel:4
&lt;br /&gt;

&lt;br /&gt;
Quote of the month:
&lt;br /&gt;

&lt;br /&gt;
  Parallel has an option for almost everything, it's almost too much.
&lt;br /&gt;
    -- tester457@ycombinator
&lt;br /&gt;

&lt;br /&gt;
New in this release:
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Replacement string: {%jq: jq-expression %}
&lt;/li&gt;
&lt;li&gt;Use $^X when calling perl. So if different versions of perl are found in $PATH, we use the same version that started GNU Parallel.
&lt;/li&gt;
&lt;li&gt;Bug fixes and man page updates.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
GNU Parallel - For people who live life in the parallel lane.
&lt;br /&gt;

&lt;br /&gt;
If you like GNU Parallel record a video testimonial: Say who you are, what you use GNU Parallel for, how it helps you, and what you like most about it. Include a command that uses GNU Parallel if you feel like it.
&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;h2&gt;About GNU Parallel&lt;/h2&gt;
&lt;p&gt;
&lt;br /&gt;
GNU Parallel is a shell tool for executing jobs in parallel using one or more computers. A job can be a single command or a small script that has to be run for each of the lines in the input. The typical input is a list of files, a list of hosts, a list of users, a list of URLs, or a list of tables. A job can also be a command that reads from a pipe. GNU Parallel can then split the input and pipe it into commands in parallel.
&lt;br /&gt;

&lt;br /&gt;
If you use xargs and tee today you will find GNU Parallel very easy to use as GNU Parallel is written to have the same options as xargs. If you write loops in shell, you will find GNU Parallel may be able to replace most of the loops and make them run faster by running several jobs in parallel. GNU Parallel can even replace nested loops.
&lt;br /&gt;

&lt;br /&gt;
GNU Parallel makes sure output from the commands is the same output as you would get had you run the commands sequentially. This makes it possible to use output from GNU Parallel as input for other programs.
&lt;br /&gt;

&lt;br /&gt;
For example you can run this to convert all jpeg files into png and gif files and have a progress bar:
&lt;br /&gt;

&lt;br /&gt;
  parallel --bar convert {1} {1.}.{2} ::: *.jpg ::: png gif
&lt;br /&gt;

&lt;br /&gt;
Or you can generate big, medium, and small thumbnails of all jpeg files in sub dirs:
&lt;br /&gt;

&lt;br /&gt;
  find . -name '*.jpg' |
&lt;br /&gt;
    parallel convert -geometry {2} {1} {1//}/thumb{2}_{1/} :::: - ::: 50 100 200
&lt;br /&gt;

&lt;br /&gt;
You can find more about GNU Parallel at: &lt;a href="http://www.gnu.org/s/parallel/"&gt;http://www.gnu ... rg/s/parallel/&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
You can install GNU Parallel in just 10 seconds with:
&lt;br /&gt;

&lt;br /&gt;
    $ (wget -O - pi.dk/3 || lynx -source pi.dk/3 || curl pi.dk/3/ || \
&lt;br /&gt;
       fetch -o - &lt;a href="http://pi.dk/3"&gt;http://pi.dk/3&lt;/a&gt; ) &amp;gt; install.sh
&lt;br /&gt;
    $ sha1sum install.sh | grep c555f616391c6f7c28bf938044f4ec50
&lt;br /&gt;
    12345678 c555f616 391c6f7c 28bf9380 44f4ec50
&lt;br /&gt;
    $ md5sum install.sh | grep 707275363428aa9e9a136b9a7296dfe4
&lt;br /&gt;
    70727536 3428aa9e 9a136b9a 7296dfe4
&lt;br /&gt;
    $ sha512sum install.sh | grep b24bfe249695e0236f6bc7de85828fe1f08f4259
&lt;br /&gt;
    83320d89 f56698ec 77454856 895edc3e aa16feab 2757966e 5092ef2d 661b8b45
&lt;br /&gt;
    b24bfe24 9695e023 6f6bc7de 85828fe1 f08f4259 6ce5480a 5e1571b2 8b722f21
&lt;br /&gt;
    $ bash install.sh
&lt;br /&gt;

&lt;br /&gt;
Watch the intro video on &lt;a href="http://www.youtube.com/playlist?list=PL284C9FF2488BC6D1"&gt;http://www.youtub ... L284C9FF2488BC6D1&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Walk through the tutorial (man parallel_tutorial). Your command line will love you for it.
&lt;br /&gt;

&lt;br /&gt;
When using programs that use GNU Parallel to process data for publication please cite:
&lt;br /&gt;

&lt;br /&gt;
O. Tange (2018): GNU Parallel 2018, March 2018, &lt;a href="https://doi.org/10.5281/zenodo.1146014"&gt;https://doi.org/1 ... 81/zenodo.1146014&lt;/a&gt;.
&lt;br /&gt;

&lt;br /&gt;
If you like GNU Parallel:
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Give a demo at your local user group/team/colleagues
&lt;/li&gt;
&lt;li&gt;Post the intro videos on Reddit/Diaspora*/forums/blogs/ Identi.ca/Google+/Twitter/Facebook/Linkedin/mailing lists
&lt;/li&gt;
&lt;li&gt;Get the merchandise &lt;a href="https://gnuparallel.threadless.com/designs/gnu-parallel"&gt;https://gnuparall ... igns/gnu-parallel&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Request or write a review for your favourite blog or magazine
&lt;/li&gt;
&lt;li&gt;Request or build a package for your favourite distribution (if it is not already there)
&lt;/li&gt;
&lt;li&gt;Invite me for your next conference
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
If you use programs that use GNU Parallel for research:
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Please cite GNU Parallel in you publications (use --citation)
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
If GNU Parallel saves you money:
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;(Have your company) donate to FSF &lt;a href="https://my.fsf.org/donate/"&gt;https://my.f ... .org/donate/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;h2&gt;About GNU SQL&lt;/h2&gt;
&lt;p&gt;
&lt;br /&gt;
GNU sql aims to give a simple, unified interface for accessing databases through all the different databases' command line clients. So far the focus has been on giving a common way to specify login information (protocol, username, password, hostname, and port number), size (database and table size), and running queries.
&lt;br /&gt;

&lt;br /&gt;
The database is addressed using a DBURL. If commands are left out you will get that database's interactive shell.
&lt;br /&gt;

&lt;br /&gt;
When using GNU SQL for a publication please cite:
&lt;br /&gt;

&lt;br /&gt;
O. Tange (2011): GNU SQL - A Command Line Tool for Accessing Different Databases Using DBURLs, ;login: The USENIX Magazine, April 2011:29-32.
&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;h2&gt;About GNU Niceload&lt;/h2&gt;
&lt;p&gt;
&lt;br /&gt;
GNU niceload slows down a program when the computer load average (or other system activity) is above a certain limit. When the limit is reached the program will be suspended for some time. If the limit is a soft limit the program will be allowed to run for short amounts of time before being suspended again. If the limit is a hard limit the program will only be allowed to run when the system is below the limit.&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Sun, 30 Aug 2026 21:07:02 +0000</pubDate>

</item> 
<item>
	<title>freeipmi @ Savannah: FreeIPMI 1.6.19 Released</title>
	<guid>https://savannah.gnu.org/news/?id=10929</guid>
	<link>https://savannah.gnu.org/news/?id=10929</link>
     <description>  &lt;p&gt;o Fix minor groff warnings in manpages.
&lt;br /&gt;
o Fix portability of building manpages.
&lt;br /&gt;
o Fix minor bugs found by code analysis:
&lt;br /&gt;
  - bmc-watchdog: Fix bug with --arp-response command line parsing.
&lt;br /&gt;
  - ipmi/rmcpping: Fix bug with finding an IPv6 interface.
&lt;br /&gt;
  - ipmidetect: fix bug in which hostname configs not used properly
&lt;br /&gt;
  - ipmi-oem intelnm: fix parsing of hours/minutes error
&lt;br /&gt;
  - ipmi-oem: Correct Dell CMC IPv6 autoconfiguration output.
&lt;br /&gt;
  - ipmi-oem: Correct Dell iDRAC web server control output.
&lt;br /&gt;
  - libipmidetect: Isolate partial results between fallback servers.
&lt;br /&gt;
  - libipmidetect: Honor caller-provided hostnames over configured defaults.
&lt;br /&gt;
  - common: Preserve stream state when finishing buffered output.
&lt;br /&gt;
  - common: Fix buffer-output configuration parse issue.
&lt;br /&gt;
  - common: Parse UTC offset configuration as an integer.
&lt;br /&gt;
  - ipmiconsole: Monitor both console descriptors.
&lt;br /&gt;
  - ipmiconsole: Check valid payload instance range correctly.
&lt;br /&gt;
  - ipmi-sel: Honor post-clear after full tail output.
&lt;br /&gt;
  - ipmi-fru: Report DIMM capacities in megabytes.
&lt;br /&gt;
  - ipmi-chassis: Apply the Power-On Hours scale correctly.
&lt;br /&gt;
  - libipmimonitoring: fix mem-leak on SEL iterator
&lt;br /&gt;
  - libipmimonitoring: allow cipher suite 0 in configs
&lt;br /&gt;
  - libipmimonitoring: report NO_SEL_RECORDS instead of
&lt;br /&gt;
    NO_SENSOR_READINGS cut and paste errors in some functions.
&lt;br /&gt;
o Fix potential stack overflows found by code analysis in ipmi-oem dell get-system-info command (specifically idrac-info, cmc-info, cmc-ipv6-info subcommands) and ipmi-oem fujitsu get-sel-entry-long-text.
&lt;br /&gt;
o Fix potential stack overflow in libfreeipmi also related to Fujitsu long SEL entries.
&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;
&lt;a href="https://ftp.gnu.org/gnu/freeipmi/freeipmi-1.6.19.tar.gz"&gt;https://ftp.gnu.o ... pmi-1.6.19.tar.gz&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Fri, 28 Aug 2026 16:21:48 +0000</pubDate>

</item> 
<item>
	<title>FSF News: Job opportunity: Systems Integration Administrator at the Free Software Foundation</title>
	<guid>http://www.fsf.org/news/2026-job-opportunity-fsf-systems-integration-administrator</guid>
	<link>http://www.fsf.org/news/2026-job-opportunity-fsf-systems-integration-administrator</link>
     <description>  BOSTON, Massachusetts, USA (Wednesday, August 26, 2026) â€” The Free Software Foundation (FSF), a Massachusetts 501(c)(3) charity with a worldwide mission to promote computer user freedom, seeks a motivated and talented individual to be our new Systems Integration Administrator. This position is ideally full-time and US-based, but exceptions can be made for a qualified candidate. </description> 
	<pubDate>Wed, 26 Aug 2026 18:55:00 +0000</pubDate>

</item> 
<item>
	<title>automake @ Savannah: automake-1.18.92 released [beta]</title>
	<guid>https://savannah.gnu.org/news/?id=10927</guid>
	<link>https://savannah.gnu.org/news/?id=10927</link>
     <description>  &lt;p&gt;This is to announce automake-1.18.92, a beta release in preparation for automake-1.19.  Announcement:
&lt;br /&gt;

&lt;br /&gt;
&lt;a href="https://lists.gnu.org/archive/html/autotools-announce/2026-08/msg00000.html"&gt;https://lists.gnu ... -08/msg00000.html&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Tue, 25 Aug 2026 14:32:56 +0000</pubDate>

</item> 
<item>
	<title>unrtf @ Savannah: unrtf 0.21.12</title>
	<guid>https://savannah.gnu.org/news/?id=10925</guid>
	<link>https://savannah.gnu.org/news/?id=10925</link>
     <description>  &lt;p&gt;unrtf 0.21.12 is released, fixing a serious recently submitted security issue.&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Mon, 24 Aug 2026 08:22:49 +0000</pubDate>

</item> 
<item>
	<title>GNU Taler news: Book chapter on Taler as sCBDC technology published</title>
	<guid>https://taler.net/en/news/2026-10.html</guid>
	<link>https://taler.net/en/news/2026-10.html</link>
     <description>  &lt;article&gt;
             The chapter is published as DOI 10.1007/978-3-032-22946-5_9 and the author's preprint is available here. The abstract reads as follows:
           &lt;/article&gt; </description> 
	<pubDate>Thu, 20 Aug 2026 22:00:00 +0000</pubDate>

</item> 
<item>
	<title>GNUnet News: GNUnet 0.29.0</title>
	<guid>https://gnunet.org/en/news/2026-08-0.29.0.html</guid>
	<link>https://gnunet.org/en/news/2026-08-0.29.0.html</link>
     <description>  &lt;article id="newspost-content"&gt;
 
  &lt;h1&gt;
   GNUnet 0.29.0 released
  &lt;/h1&gt;
  &lt;p&gt;
   We are pleased to announce the release of GNUnet 0.29.0.
   &lt;br /&gt;
   GNUnet is an alternative network stack for building secure, decentralized and
  privacy-preserving distributed applications.
  Our goal is to replace the old insecure Internet protocol stack.
  Starting from an application for secure publication of files, it has grown to
  include all kinds of basic protocol components and applications towards the
  creation of a GNU internet.
  &lt;/p&gt;
  &lt;p&gt;
   This is a new major release.
  The release addresses a couple of regressions and general instability of the transport subsystem.
  Major versions may break protocol compatibility with the 0.28.X versions.
  Please be aware that Git master is thus henceforth (and has been for a
  while)
   &lt;b&gt;
    INCOMPATIBLE
   &lt;/b&gt;
   with
  the 0.28.X GNUnet network, and interactions between old and new peers
  will result in issues.
  In terms of usability, users should be aware that there are still
   &lt;b&gt;
    a number of known open issues
   &lt;/b&gt;
   in particular with respect to ease
  of use, but also some critical privacy issues especially for mobile users.
  Also, the nascent network is tiny and thus unlikely to
  provide good anonymity or extensive amounts of interesting information.
  As a result, the 0.29.0 release is still
   &lt;b&gt;
    only suitable for early adopters
  with some reasonable pain tolerance
   &lt;/b&gt;
   .
  &lt;/p&gt;
  &lt;h4&gt;
   Download links
  &lt;/h4&gt;
  &lt;ul&gt;
   &lt;li&gt;
    &lt;a href="https://ftpmirror.gnu.org/gnunet/gnunet-0.29.0.tar.gz"&gt;
     gnunet-0.29.0.tar.gz
    &lt;/a&gt;
    (
    &lt;a href="https://ftpmirror.gnu.org/gnunet/gnunet-0.29.0.tar.gz.sig"&gt;
     signature
    &lt;/a&gt;
    )
   &lt;/li&gt;
   
   &lt;p&gt;
    The GPG key used to sign is:
    &lt;a href="https://www.gnunet.org/~schanzen/3D11063C10F98D14BD24D1470B0998EF86F59B6A"&gt;
     3D11063C10F98D14BD24D1470B0998EF86F59B6A
    &lt;/a&gt;
   &lt;/p&gt;
   &lt;p&gt;
    Note that due to mirror synchronization, not all links might be functional
  early after the release. For direct access try
    &lt;a href="http://ftp.gnu.org/gnu/gnunet/"&gt;
     http://ftp.gnu.org/gnu/gnunet/
    &lt;/a&gt;
   &lt;/p&gt;
   &lt;h4&gt;
    Changes
   &lt;/h4&gt;
   &lt;p&gt;
    A detailed list of changes can be found in the git log, the NEWS.
   &lt;/p&gt;
   &lt;h4&gt;
    Known Issues
   &lt;/h4&gt;
   &lt;ul&gt;
    &lt;li&gt;
     There are known moderate implementation limitations in CADET that negatively impact performance.
    &lt;/li&gt;
    &lt;li&gt;
     There are known moderate design issues in FS that also impact usability and performance.
    &lt;/li&gt;
    &lt;li&gt;
     There are minor implementation limitations in SET that create unnecessary attack surface for availability.
    &lt;/li&gt;
    &lt;li&gt;
     The RPS subsystem remains experimental.
    &lt;/li&gt;
   &lt;/ul&gt;
   &lt;p&gt;
    In addition to this list, you may also want to consult our bug tracker at
    &lt;a href="https://bugs.gnunet.org/"&gt;
     bugs.gnunet.org
    &lt;/a&gt;
    which lists about 190 more specific issues.
   &lt;/p&gt;
   &lt;h4&gt;
    Thanks
   &lt;/h4&gt;
   &lt;p&gt;
    This release was the work of many people. The following people contributed code and were thus easily identified:
Christian Grothoff, Florian Dold, TheJackiMonster, and Martin Schanzenbach.
   &lt;/p&gt;
   
  &lt;/ul&gt;
 
&lt;/article&gt; </description> 
	<pubDate>Wed, 19 Aug 2026 22:00:00 +0000</pubDate>

</item> 
<item>
	<title>health @ Savannah: GNU Health strict No Generative Artificial Intelligence Policy</title>
	<guid>https://savannah.gnu.org/news/?id=10924</guid>
	<link>https://savannah.gnu.org/news/?id=10924</link>
     <description>  &lt;p&gt;Dear community
&lt;br /&gt;

&lt;br /&gt;
We have included in the GNU Health &lt;b&gt;Code of Conduct&lt;/b&gt; the strict NO Generative Artificial Intelligence policy.
&lt;br /&gt;

&lt;br /&gt;
The current version reads:
&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;blockquote class="verbatim"&gt;&lt;p&gt; GNU Health Strict No Generative Artificial Intelligence Policy&lt;br /&gt;
&lt;br /&gt;
GNU Health is social project made by humans and for humans. We DO NOT accept any code, artwork, review, documentation or issues created by generative Artifical Intelligence (GenAI) / Large Language Models (LLMs).&lt;br /&gt;
&lt;br /&gt;
The GNU Health no-AI policy is because we strongly believe that:&lt;br /&gt;
&lt;br /&gt;
* GenAI is bad for Mother Nature&lt;br /&gt;
* GenAI is bad for human rights, especially for underserved and marginalized communities.&lt;br /&gt;
* GenAI is bad for the Free Software and Free Culture communities.&lt;br /&gt;
* GenAI is bad for you&lt;br /&gt;
&lt;br /&gt;
Last but not least, GNU Health manages critical health information both at personal and population level. There must be a reasoning behind every single line of code. We make all the effort to minimize bugs that can jeopardize the integrity and security of the system, and we can not risk the project by putting it in hands of stochastic parrots.&lt;br /&gt;
&lt;br /&gt;
Letâ€™s keep the art and science of computing a human virtue.&lt;br /&gt;
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;
&lt;br /&gt;
You can read the entire, most current version of GNU Health Code of conduct here:
&lt;br /&gt;
&lt;a href="https://docs.gnuhealth.org/his/appendix/conduct.html"&gt;https://docs.gnuh ... ndix/conduct.html&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Wed, 19 Aug 2026 15:30:29 +0000</pubDate>

</item> 
<item>
	<title>poke @ Savannah: GNU poke 5.0 released</title>
	<guid>https://savannah.gnu.org/news/?id=10923</guid>
	<link>https://savannah.gnu.org/news/?id=10923</link>
     <description>  &lt;p&gt;I am happy to announce a new major release of GNU poke, version 5.0.
&lt;br /&gt;

&lt;br /&gt;
GNU poke 5.0 release is now available at
&lt;br /&gt;
&lt;a href="https://ftp.gnu.org/gnu/poke/poke-5.0.tar.gz"&gt;https://ftp.gnu.o ... e/poke-5.0.tar.gz&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
The tarball is signed and you can get the PGP signature at
&lt;br /&gt;
&lt;a href="https://ftp.gnu.org/gnu/poke/poke-5.0.tar.gz.sig"&gt;https://ftp.gnu.o ... ke-5.0.tar.gz.sig&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
  GNU poke (&lt;a href="http://www.jemarch.net/poke"&gt;http://www.j ... rch.net/poke&lt;/a&gt;) is an interactive, extensible
&lt;br /&gt;
  editor for binary data.  Not limited to editing basic entities such
&lt;br /&gt;
  as bits and bytes, it provides a full-fledged procedural,
&lt;br /&gt;
  interactive programming language designed to describe data
&lt;br /&gt;
  structures and to operate on them.
&lt;br /&gt;

&lt;br /&gt;
I'd like to thank everyone who contributed to this release through code,
&lt;br /&gt;
documentation, or testing.
&lt;br /&gt;

&lt;br /&gt;
What is new in this release:
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;h4&gt;User interface updates&lt;/h4&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Now hyperlink server can bind to a user-specified port for listening to
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;commands (-p, --hserver-port).
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;h4&gt;Poke Language updates&lt;/h4&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Floating-point arithmetic is now supported on uint&amp;lt;32&amp;gt;/uint&amp;lt;64&amp;gt; types.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  uint&amp;lt;32&amp;gt; will be interpreted as a single-precision floating-point number
&lt;br /&gt;
  and uint&amp;lt;64&amp;gt; will be interpreted as a double-precision floating-point
&lt;br /&gt;
  number as defined per the IEEE 754 standard.
&lt;br /&gt;
  The following expressions are now supported:
&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;blockquote class="verbatim"&gt;&lt;p&gt;     - Addition:       a .+  b&lt;br /&gt;
    - Subtraction:    a .-  b&lt;br /&gt;
    - Multiplication: a .*  b&lt;br /&gt;
    - Division:       a ./  b&lt;br /&gt;
    - Ceil-devision:  a ./^ b&lt;br /&gt;
    - Exponentiation: a .** b&lt;br /&gt;
    - Remainder:      a .%  b&lt;br /&gt;
    - Post-increment: a.++&lt;br /&gt;
    - Pre-increment:  .++a&lt;br /&gt;
    - Post-decrement: a.--&lt;br /&gt;
    - Pre-decrement:  .--a&lt;br /&gt;
    - Negation:      .-a&lt;br /&gt;
&lt;br /&gt;
    - Less-than:                a .&amp;lt;  b&lt;br /&gt;
    - Less-than-or-equal-to:    a .&amp;lt;= b&lt;br /&gt;
    - Greater-than:             a .&amp;gt;  b&lt;br /&gt;
    - Greater-than-or-equal-to: a .&amp;gt;= b&lt;br /&gt;
    - Equal-to:                 a .== b&lt;br /&gt;
    - Not-equal-to:             a .!= b&lt;br /&gt;
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;h4&gt;Poke Runtime updates&lt;/h4&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Thanks to the great work of David Faust, poke now supports reactive IO
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  spaces!  Extent of a PVM value mapped in a given IO space will be tracked
&lt;br /&gt;
  and values will be re-mapped only if a write happens in their extent; which
&lt;br /&gt;
  is a big performance win for read-intense programs.
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A bunch of undefined behavior (UB) releated to left-shifts has been fixed.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Improved human-readable message of E_conv exception when verifying
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  length/size of an array with dynamic bound(s) to help the user to
&lt;br /&gt;
  understand the mistake.
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;h4&gt;Poke compiler updates&lt;/h4&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Now poke can properly handle writes to nested integral struct/unions
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  fields.  Previously write to nested fields of integral structs did not
&lt;br /&gt;
  materialize in IO space.
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;h4&gt;Standard Poke Library updates&lt;/h4&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Closure's pretty printer now adds closure's name (identifier) to output.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Two new functions to calculate square root of single and double precision
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  floating point numbers: sqrtf and sqrtd.
&lt;br /&gt;
  They accept uint&amp;lt;32&amp;gt; and uint&amp;lt;64&amp;gt; respectively as the IEEE 754 single and
&lt;br /&gt;
  double precision floating-point numbers.
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;h4&gt;libpoke updates&lt;/h4&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Version of DSO is bumped to 2.0.0, and from this release onward, we try
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  to not break the ABI, and bump the version components according to the
&lt;br /&gt;
  libtool's recommendation (when needed).
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;To be able to keep the ABI backward-compatibility promise, all public APIs
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  are now accepting either pk_compiler or pk_val.  This is the first step
&lt;br /&gt;
  toward removing global state from libpoke to be able to have multiple
&lt;br /&gt;
  instances of libpoke in a single process (and also to be able to accomplish
&lt;br /&gt;
  thread-safety). We're not there yet, but we'll be there some day (hopefully
&lt;br /&gt;
  soon)!
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;h4&gt;IO subsystem updates&lt;/h4&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;IOS_F_TRUNCATE has been re-introduced (it was removed after release of
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  poke 1.0 by the rationale that it's not that useful of a flag.  Turns
&lt;br /&gt;
  out it's quite useful to start from an empty file when assembling binary
&lt;br /&gt;
  files from scratch using poke.
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;h4&gt;Pickles updates&lt;/h4&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Improved ustar pickle and add tests.  Method get_last_mod_time has been
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  fixed and the following methods has been added:
&lt;br /&gt;
  get_{file,owner_user,group}_name.
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Improved time pickle to print date and time properly (zero-padded), and
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  also add ptime_str function to get date/time information as a string.
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;h4&gt;Platform supports&lt;/h4&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We tried to improve MinGW compilation situation by importing more Gnulib
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  modules, but we still cannot have poke executable for MinGW platform.
&lt;br /&gt;
  Help is very much appreciated in this area!
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;h4&gt;Documentation updates&lt;/h4&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Thanks to people who actually read the reference manual, this release
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  includes a bunch of corrections to the documentation! Cheers to them!
&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;
Happy poking!
&lt;br /&gt;
Mohammad-Reza Nabipoor&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Mon, 17 Aug 2026 08:51:27 +0000</pubDate>

</item> 
<item>
	<title>wdiff @ Savannah: wdiff-1.2.3 released [stable]</title>
	<guid>https://savannah.gnu.org/news/?id=10922</guid>
	<link>https://savannah.gnu.org/news/?id=10922</link>
     <description>  &lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;blockquote class="verbatim"&gt;&lt;p&gt; This is to announce wdiff-1.2.3, a stable release.&lt;br /&gt;
&lt;br /&gt;
There have been 29 commits by 2 people in the 637 weeks since 1.2.2.&lt;br /&gt;
&lt;br /&gt;
See the NEWS below for a brief summary.&lt;br /&gt;
&lt;br /&gt;
Thanks to everyone who has contributed!&lt;br /&gt;
The following people contributed changes to this release:&lt;br /&gt;
&lt;br /&gt;
  Bob Proulx (6)&lt;br /&gt;
  Simon Josefsson (23)&lt;br /&gt;
&lt;br /&gt;
Happy Hacking,&lt;br /&gt;
Simon [on behalf of the wdiff maintainers]&lt;br /&gt;
==================================================================&lt;br /&gt;
&lt;br /&gt;
Here is the GNU wdiff home page:&lt;br /&gt;
  https://www.gnu.org/software/wdiff/&lt;br /&gt;
&lt;br /&gt;
Manual:&lt;br /&gt;
  https://www.gnu.org/software/wdiff/manual/&lt;br /&gt;
  https://www.gnu.org/software/wdiff/manual/wdiff.html - HTML format&lt;br /&gt;
  https://www.gnu.org/software/wdiff/manual/wdiff.pdf  - PDF format&lt;br /&gt;
&lt;br /&gt;
Here are the compressed sources and a GPG detached signature:&lt;br /&gt;
  https://ftp.gnu.org/gnu/wdiff/wdiff-1.2.3.tar.gz&lt;br /&gt;
  https://ftp.gnu.org/gnu/wdiff/wdiff-1.2.3.tar.gz.sig&lt;br /&gt;
&lt;br /&gt;
Here is minimal source-only "git archive" sources:&lt;br /&gt;
  https://ftp.gnu.org/gnu/wdiff/wdiff-v1.2.3-src.tar.gz&lt;br /&gt;
  https://ftp.gnu.org/gnu/wdiff/wdiff-v1.2.3-src.tar.gz.sig&lt;br /&gt;
&lt;br /&gt;
Use a mirror for higher download bandwidth:&lt;br /&gt;
  https://www.gnu.org/order/ftp.html&lt;br /&gt;
&lt;br /&gt;
Here are the SHA256 and SHA3-256 checksums:&lt;br /&gt;
&lt;br /&gt;
  File: wdiff-1.2.3.tar.gz&lt;br /&gt;
  SHA256 sum:   29a4457eb0ed35c902e6732d71f25e1d6c7fe7fa0eda0fb6c371ed6779b49fd6&lt;br /&gt;
  SHA3-256 sum: 2f558fe6b7a69524f29d266c4018c80a10135cef2e4a53ae3c2944c1fc12c95d&lt;br /&gt;
&lt;br /&gt;
  File: wdiff-v1.2.3-src.tar.gz&lt;br /&gt;
  SHA256 sum:   dc29d8f530471b9a8935413dca32e45848363f6e58888fc7307f5f052b8fb827&lt;br /&gt;
  SHA3-256 sum: 4db1f41eda5e1525f3ced491af1fc1ad094cc21c209e789d12a1ea8f611be24e&lt;br /&gt;
&lt;br /&gt;
Verify the SHA256 checksum with either sha256sum, sha256, or&lt;br /&gt;
'shasum -a 256'.&lt;br /&gt;
&lt;br /&gt;
Verify the SHA3-256 checksum with 'cksum -a sha3 -l 256 --base64'&lt;br /&gt;
from coreutils-9.8.&lt;br /&gt;
&lt;br /&gt;
Use a .sig file to verify that the corresponding file (without the&lt;br /&gt;
.sig suffix) is intact.  First, be sure to download both the .sig file&lt;br /&gt;
and the corresponding tarball.  Then, run a command like this:&lt;br /&gt;
&lt;br /&gt;
  gpg --verify wdiff-1.2.3.tar.gz.sig&lt;br /&gt;
&lt;br /&gt;
The signature should match the fingerprint of the following key:&lt;br /&gt;
&lt;br /&gt;
  pub   ed25519 2019-03-20 [SC]&lt;br /&gt;
        B1D2 BD13 75BE CB78 4CF4  F8C4 D73C F638 C53C 06BE&lt;br /&gt;
  uid   Simon Josefsson &amp;lt;simon@josefsson.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If that command fails because you don't have the required public key,&lt;br /&gt;
or that public key has expired, try the following commands to retrieve&lt;br /&gt;
or refresh it, and then rerun the 'gpg --verify' command.&lt;br /&gt;
&lt;br /&gt;
  gpg --locate-external-key simon@josefsson.org&lt;br /&gt;
&lt;br /&gt;
  gpg --recv-keys 51722B08FE4745A2&lt;br /&gt;
&lt;br /&gt;
  wget -q -O- 'https://savannah.gnu.org/project/release-gpgkeys.php?group=wdiff&amp;amp;download=1' | gpg --import -&lt;br /&gt;
&lt;br /&gt;
As a last resort to find the key, you can try the official GNU&lt;br /&gt;
keyring:&lt;br /&gt;
&lt;br /&gt;
  wget -q https://ftp.gnu.org/gnu/gnu-keyring.gpg&lt;br /&gt;
  gpg --keyring gnu-keyring.gpg --verify wdiff-1.2.3.tar.gz.sig&lt;br /&gt;
&lt;br /&gt;
This release is based on the wdiff git repository, available as&lt;br /&gt;
&lt;br /&gt;
  git clone https://https.git.savannah.gnu.org/git/wdiff.git&lt;br /&gt;
&lt;br /&gt;
with commit 31fe62c4a3e2a76e5d68f571b1aa2f10815ca51f tagged as v1.2.3.&lt;br /&gt;
&lt;br /&gt;
For a summary of changes and contributors, see:&lt;br /&gt;
&lt;br /&gt;
  https://gitweb.git.savannah.gnu.org/gitweb/?p=wdiff.git;a=shortlog;h=v1.2.3&lt;br /&gt;
&lt;br /&gt;
or run this command from a git-cloned wdiff directory:&lt;br /&gt;
&lt;br /&gt;
  git shortlog v1.2.2..v1.2.3&lt;br /&gt;
&lt;br /&gt;
This release was bootstrapped with the following tools:&lt;br /&gt;
  Gnulib 31fe62c4a3e2a76e5d68f571b1aa2f10815ca51f&lt;br /&gt;
  Autoconf 2.72&lt;br /&gt;
  Automake 1.17&lt;br /&gt;
  Make 4.4.1&lt;br /&gt;
  Makeinfo 7.3&lt;br /&gt;
  Help2man 1.49.2&lt;br /&gt;
  Tar 1.35&lt;br /&gt;
  Gzip 1.13&lt;br /&gt;
&lt;br /&gt;
NEWS&lt;br /&gt;
&lt;br /&gt;
* Noteworthy changes in release 1.2.3 (2026-06-30) [stable]&lt;br /&gt;
&lt;br /&gt;
** Modernize build environment.&lt;br /&gt;
Several minor fixes including build fixes for modern C23 compilers.&lt;br /&gt;
Many generated or obsolete files have been removed from git.&lt;br /&gt;
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Wed, 12 Aug 2026 19:28:40 +0000</pubDate>

</item> 
<item>
	<title>poke @ Savannah: GNU poke 4.90 pre-release is available</title>
	<guid>https://savannah.gnu.org/news/?id=10921</guid>
	<link>https://savannah.gnu.org/news/?id=10921</link>
     <description>  &lt;p&gt;GNU poke (&lt;a href="http://www.jemarch.net/poke"&gt;http://www.j ... rch.net/poke&lt;/a&gt;) is an interactive, extensible
&lt;br /&gt;
editor for binary data.  Not limited to editing basic entities such
&lt;br /&gt;
as bits and bytes, it provides a full-fledged procedural,
&lt;br /&gt;
interactive programming language designed to describe data
&lt;br /&gt;
structures and to operate on them.
&lt;br /&gt;

&lt;br /&gt;
GNU poke 4.90 pre-release is now available at
&lt;br /&gt;
&lt;a href="https://alpha.gnu.org/gnu/poke/poke-4.90.tar.gz"&gt;https://alpha.gnu ... /poke-4.90.tar.gz&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
The tarball is signed and you can get the PGP signature at
&lt;br /&gt;
&lt;a href="https://alpha.gnu.org/gnu/poke/poke-4.90.tar.gz.sig"&gt;https://alpha.gnu ... e-4.90.tar.gz.sig&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
The planned date for releasing 5.0 is Sunday 15 August 2026, but
&lt;br /&gt;
this may change depending on the amount of problems found in this
&lt;br /&gt;
pre-release, and the subsequent needed additional pre-releases.
&lt;br /&gt;

&lt;br /&gt;
Please report any problem found with the pre-release, comments or
&lt;br /&gt;
patches to poke-devel@gnu.org.
&lt;br /&gt;

&lt;br /&gt;
In behalf of the poke developers, thank you!
&lt;br /&gt;

&lt;br /&gt;
Happy testing!
&lt;br /&gt;
Mohammad-Reza Nabipoor&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Mon, 10 Aug 2026 22:33:41 +0000</pubDate>

</item> 
<item>
	<title>FSF News: FSF publishes incident report on GNU Savannah vulnerabilities</title>
	<guid>http://www.fsf.org/news/fsf-publishes-incident-report-on-gnu-savannah-vulnerabilities</guid>
	<link>http://www.fsf.org/news/fsf-publishes-incident-report-on-gnu-savannah-vulnerabilities</link>
    
	<pubDate>Fri, 07 Aug 2026 21:57:31 +0000</pubDate>

</item> 
<item>
	<title>Greg Casamento: Open Source Is Hobbling Itself Over Generative AI</title>
	<guid>tag:blogger.com,1999:blog-13189460.post-2013715744677408934</guid>
	<link>https://heronsperch.blogspot.com/2026/08/open-source-is-hobbling-itself-over.html</link>
     <description>  &lt;p&gt; &lt;/p&gt;&lt;h1&gt;&lt;br /&gt;&lt;/h1&gt;&lt;p&gt;&lt;em&gt;The answer to bad AI-assisted contributions is not a purity test. It is better engineering discipline.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Earlier this year, a discussion in the GNUstep community raised a proposal that will sound familiar across the Free Software world: prohibit AI-generated code in core projects and proudly advertise the result as “coded by humans” or “AI-free.” The argument was not frivolous. Generative AI raises real questions about copyright, attribution, security, energy use, labor, trust, and the flood of low-quality patches that maintainers are increasingly being asked to review.&lt;/p&gt;&lt;p&gt;But a blanket refusal to use generative AI is the wrong response. It does not solve the hardest problems. It creates rules that are nearly impossible to define or enforce, confuses the method of production with the quality of the product, and risks turning Free Software into a movement that protects yesterday’s workflow instead of protecting software freedom.&lt;/p&gt;&lt;p&gt;Open Source and Free Software are already operating with too few maintainers, too much technical debt, and too many important projects resting on the unpaid labor of a handful of people. We should be very careful about categorically rejecting tools that might help contributors understand old code, write tests, improve documentation, port software, find defects, or perform mechanical modernization. We should be even more careful when our proposed alternative offers the appearance of trust without the substance of it.&lt;/p&gt;&lt;p&gt;The better principle is straightforward:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Regulate the code, not the development process.&lt;/p&gt;&lt;/blockquote&gt;&lt;h2&gt;“AI-generated” is not a workable boundary&lt;/h2&gt;&lt;p&gt;What exactly counts as AI-generated code?&lt;/p&gt;&lt;p&gt;Is it a complete function produced from a prompt? A line accepted from an AI-powered autocomplete system? A compiler-suggested correction? An automated refactoring? A test generated from an existing implementation? A translation of documentation? A patch written by a human after asking a model to explain an unfamiliar API? What if the developer uses AI to identify the problem but writes every line manually? What if an IDE quietly includes machine-learning features the contributor never explicitly invoked?&lt;/p&gt;&lt;p&gt;The line between “human-written” and “AI-assisted” is already blurred, and it will become less distinct as generative features are embedded in editors, compilers, debuggers, search engines, and operating systems. A ban that cannot draw a stable boundary will be applied inconsistently. Honest contributors will disclose and be penalized; dishonest contributors will simply omit the disclosure. Others may be falsely accused because their code “looks generated.”&lt;/p&gt;&lt;p&gt;An “AI-free” badge therefore risks promising something a project cannot reliably prove. Free Software should be especially suspicious of unverifiable labels.&lt;/p&gt;&lt;h2&gt;The risks are real—and they argue for review&lt;/h2&gt;&lt;p&gt;None of this means generated code should be trusted.&lt;/p&gt;&lt;p&gt;Research has found substantial security weaknesses in AI-produced code. One empirical study of Copilot snippets found security problems in roughly 30 percent of Python snippets and 24 percent of JavaScript snippets in its later dataset. Other research has demonstrated that code models can memorize portions of their training data, while studies of license compliance have found that models often provide inaccurate licensing information, particularly for copyleft code. Those are serious concerns, not anti-AI superstition. (&lt;a href="https://arxiv.org/html/2310.02059v4"&gt;Security weaknesses study&lt;/a&gt;; &lt;a href="https://arxiv.org/html/2308.09932v2"&gt;memorization study&lt;/a&gt;; &lt;a href="https://arxiv.org/html/2408.02487v3"&gt;license-compliance study&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;The productivity story is also more complicated than the advertising. GitHub reported that developers completed a controlled programming task considerably faster with Copilot, but a later randomized study of experienced Open Source developers working in their own repositories found that the tools available in early 2025 made them 19 percent slower. METR’s 2026 follow-up found suggestive but still statistically uncertain evidence of improvement with newer tools. AI is neither magic nor uniformly useless; its value depends on the person, task, model, and workflow. (&lt;a href="https://github.blog/news-insights/research/research-quantifying-github-copilots-impact-on-developer-productivity-and-happiness/"&gt;GitHub productivity study&lt;/a&gt;; &lt;a href="https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/"&gt;METR 2025 study&lt;/a&gt;; &lt;a href="https://metr.org/blog/2026-02-24-uplift-update/"&gt;METR 2026 update&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;But human authorship has never guaranteed secure, original, maintainable, or correctly licensed code. That is why healthy projects require tests, review, contributor certification, licensing rules, and maintainers who can reject bad work. The origin of a patch may affect how carefully we inspect it, but it cannot replace inspection.&lt;/p&gt;&lt;p&gt;If a contributor submits code they do not understand, the contribution should be rejected. If the patch fails tests, violates project style, invents APIs, introduces vulnerabilities, obscures provenance, or imposes an unreasonable review burden, it should be rejected. That is true whether the patch was produced by Claude, Copilot, a Stack Overflow answer, a contractor, a junior programmer, or a senior maintainer having a bad afternoon.&lt;/p&gt;&lt;p&gt;The repository contains code, not virtue.&lt;/p&gt;&lt;h2&gt;Review capacity is the scarce resource&lt;/h2&gt;&lt;p&gt;Maintainers have a legitimate complaint: AI can make producing a patch far cheaper than reviewing one. A person can generate thousands of lines in minutes and then expect a volunteer to spend hours establishing whether any of it is correct. That asymmetry can become a denial-of-service attack on a project even when the submitter means well.&lt;/p&gt;&lt;p&gt;The answer, however, is not necessarily to ban a tool. It is to place the cost and responsibility back on the contributor.&lt;/p&gt;&lt;p&gt;A project can require that contributors:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;disclose material use of generative AI;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;identify the tool and describe how it was used;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;certify that they reviewed and understand every submitted change;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;explain the design and answer maintainer questions without outsourcing the conversation to a model;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;provide focused tests and evidence that the patch solves a real problem;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;comply with the project’s licensing and provenance requirements;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;keep changes small enough to review; and&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;accept that unexplained, low-signal, or mass-generated submissions may be closed without detailed triage.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Disclosure is imperfect, but it establishes a community norm and makes an honest contributor accountable. Research into self-declaration practices has already found developers using everything from a simple disclosure to records of prompts, explanations, and quality checks. Projects can choose a level proportionate to their risk. (&lt;a href="https://arxiv.org/html/2504.16485v1"&gt;Study of AI-code self-declaration&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;This approach is stricter than either blind enthusiasm or symbolic prohibition. It does not say, “AI wrote it, so it must be acceptable.” It says, “You submitted it, so you are responsible for it.”&lt;/p&gt;&lt;h2&gt;Freedom is not a reenactment of an older toolchain&lt;/h2&gt;&lt;p&gt;Free Software is founded on the user’s freedom to run, study, modify, and share software. Those principles describe control over technology; they do not require that every developer use the same approved method to create it. The Open Source Initiative’s work on an Open Source AI Definition likewise frames the issue around the practical freedoms to use, study, modify, and share systems—not around preserving a pre-AI development ritual. (&lt;a href="https://opensource.org/ai/open-source-ai-definition"&gt;Open Source AI Definition 1.0&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;There are valid reasons for preferring Free or locally operated AI tools over proprietary cloud services. A project may reasonably prohibit contributors from uploading confidential material or unreleased security fixes to third-party systems. It may impose stricter provenance requirements in sensitive components. Individual maintainers may decline to review bulk-generated reports that have repeatedly produced noise. These are concrete policies tied to concrete harms.&lt;/p&gt;&lt;p&gt;What does not follow is that a project becomes more free merely because no contributor used a generative tool.&lt;/p&gt;&lt;p&gt;An “AI-free” identity may even distract from the qualities that users actually need: portability, stability, compatibility, security, good documentation, responsive maintenance, and code whose behavior can be understood and changed. A badge is not a substitute for those things.&lt;/p&gt;&lt;h2&gt;Blanket refusal has an opportunity cost&lt;/h2&gt;&lt;p&gt;Mature Free Software projects often contain decades of code and institutional knowledge. They need documentation, regression tests, API audits, build-system repairs, platform ports, translations, issue triage, and repetitive modernization. Generative AI will not perform those jobs reliably on its own. It can still help a knowledgeable contributor perform some of them.&lt;/p&gt;&lt;p&gt;Rejecting that possibility at the policy level has consequences. It may discourage younger contributors whose development environment already includes these tools. It may disadvantage people working in a second language or developers with disabilities who use AI as an accessibility aid. It may prevent experiments that would have failed harmlessly—or succeeded usefully—under ordinary review. Most dangerously, it can encourage a culture in which the declaration “human-written” is treated as evidence of quality.&lt;/p&gt;&lt;p&gt;Free Software has survived previous waves of automation. High-level languages, garbage collection, IDEs, graphical interface builders, code generators, automated formatters, static analyzers, and online code search all changed what it meant to “write” software. Each tool altered the division of labor between programmer and machine. The relevant question was never whether every token originated in a human mind. The question was whether people retained the freedom, knowledge, and responsibility needed to control the resulting system.&lt;/p&gt;&lt;p&gt;That remains the right question now.&lt;/p&gt;&lt;h2&gt;A policy that protects projects without freezing them&lt;/h2&gt;&lt;p&gt;A sensible policy can fit on one page:&lt;/p&gt;&lt;ol start="1"&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Disclosure:&lt;/strong&gt; Contributors must disclose material AI assistance in the commit message or pull request.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Responsibility:&lt;/strong&gt; The named human contributor is the author of record and must understand, explain, test, and stand behind the entire submission.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Quality:&lt;/strong&gt; AI-assisted contributions receive the same requirements for correctness, security, maintainability, style, documentation, and test coverage as any other contribution.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Provenance:&lt;/strong&gt; Contributors must have a reasonable basis to believe the submission is license-compatible and must identify known sources or generated passages that may reproduce existing code.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data protection:&lt;/strong&gt; Project secrets, embargoed vulnerabilities, private communications, and other restricted material may not be submitted to unauthorized external services.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reviewability:&lt;/strong&gt; Maintainers may reject oversized, unexplained, repetitive, or low-signal submissions without performing free forensic work for the submitter.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Local discretion:&lt;/strong&gt; Components with unusual legal, safety, privacy, or reliability risks may adopt additional written restrictions.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;This policy does not resolve every ethical question surrounding generative AI. No contribution policy can. It does, however, address the matters a software project can actually evaluate and enforce.&lt;/p&gt;&lt;h2&gt;We should not surrender the future of software freedom&lt;/h2&gt;&lt;p&gt;The Free Software community should remain one of the sharpest critics of concentrated corporate power, opaque models, exploitative data practices, environmental cost, and systems that deprive users of control. Criticism is part of our job. So is building an alternative.&lt;/p&gt;&lt;p&gt;If we define ourselves by refusing to touch an important new class of technology, proprietary vendors will shape that technology without us. If instead we insist on transparency, modifiability, privacy, local control, licensing clarity, and human accountability, we can bring the values of Free Software into the AI era.&lt;/p&gt;&lt;p&gt;We do not need to pretend that generative AI is trustworthy. We need processes that do not require us to trust it.&lt;/p&gt;&lt;p&gt;Judge the patch. Demand disclosure. Require understanding. Enforce licensing. Protect reviewers. Reject garbage.&lt;/p&gt;&lt;p&gt;But do not hobble Open Source and Free Software with a blanket ban that is difficult to define, impossible to verify, and disconnected from the quality of the code we ultimately ship.&lt;/p&gt; </description> 
	<pubDate>Tue, 04 Aug 2026 10:52:51 +0000</pubDate>
  <author>noreply@blogger.com (Unknown)</author>  
</item> 
<item>
	<title>libc @ Savannah: The GNU C Library version 2.44 is now available</title>
	<guid>https://savannah.gnu.org/news/?id=10919</guid>
	<link>https://savannah.gnu.org/news/?id=10919</link>
     <description>  &lt;p&gt;The GNU C Library
&lt;br /&gt;
=================
&lt;br /&gt;

&lt;br /&gt;
The GNU C Library version 2.44 is now available.
&lt;br /&gt;

&lt;br /&gt;
The GNU C Library is used as &lt;b&gt;the&lt;/b&gt; C library in the GNU system and
&lt;br /&gt;
in GNU/Linux systems, as well as many other systems that use Linux
&lt;br /&gt;
as the kernel.
&lt;br /&gt;

&lt;br /&gt;
The GNU C Library is primarily designed to be a portable 
&lt;br /&gt;
and high performance C library.  It follows all relevant 
&lt;br /&gt;
standards including ISO C23 and POSIX.1-2024.  It is also 
&lt;br /&gt;
internationalized and has one of the most complete 
&lt;br /&gt;
internationalization interfaces known. 
&lt;br /&gt;

&lt;br /&gt;
The GNU C Library website is at &lt;a href="http://www.gnu.org/software/libc/"&gt;http://www.gnu. ... /software/libc/&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Packages for the 2.44 release may be downloaded from:
&lt;br /&gt;
        &lt;a href="http://ftpmirror.gnu.org/libc/"&gt;http://ftpmirr ... .gnu.org/libc/&lt;/a&gt;
&lt;br /&gt;
        &lt;a href="http://ftp.gnu.org/gnu/libc/"&gt;http://ftp.gn ... org/gnu/libc/&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
The mirror list is at &lt;a href="http://www.gnu.org/order/ftp.html"&gt;http://www.gnu. ... /order/ftp.html&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Distributions are encouraged to track the release/* branches
&lt;br /&gt;
corresponding to the releases they are using.  The release
&lt;br /&gt;
branches will be updated with conservative bug fixes and new
&lt;br /&gt;
features while retaining backwards compatibility.
&lt;br /&gt;

&lt;br /&gt;
NEWS for version 2.44
&lt;br /&gt;
=====================
&lt;br /&gt;

&lt;br /&gt;
Major new features:
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;System-wide tunables can be applied using /etc/tunables.conf and
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  running ldconfig.  Specific tunable settings and the
&lt;br /&gt;
  /etc/tunables.conf file format and path are not part of the stable
&lt;br /&gt;
  library interfaces and may change between releases.
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A new tunable, glibc.elf.thp, is added to map read-only segments with
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  Transparent Huge Pages (THP) if THP is not disabled in the kernel.  When
&lt;br /&gt;
  glibc.elf.thp is set to 1, malloc uses the actual kernel THP mode
&lt;br /&gt;
  instead of defaulting to madvise mode and madvise_thp will stop issuing
&lt;br /&gt;
  MADV_HUGEPAGE if kernel THP mode is always.
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The THP page size in malloc is capped to MAX_THP_PAGESIZE.  If the THP
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  page size is above MAX_THP_PAGESIZE, THP in malloc is disabled.
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Additional optimized and correctly rounded mathematical functions have
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  been imported from the CORE-MATH project, in particular cosh, sinh, and
&lt;br /&gt;
  tanh.
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Many additional improvements to existing functions have been synchronized
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  from the CORE-MATH project.
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For C++26, the assert macro is now variadic, allowing more complex
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  arguments containing commas (which however still must evaluate to a single
&lt;br /&gt;
  value).
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The SVID error handling for cosh and sinh was moved to compatibility
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  symbols, allowing improvements in performance.
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Static PIE is now supported for arm-*-linux-gnueabi.  It requires toolchain
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  support to correctly set the expected linker options.
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;On AArch64 targets that support the Guarded Control Stack extension all GCS
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  operations (including status, write on shadow stack, and push to shadow
&lt;br /&gt;
  stack) are locked after enabling GCS with ENFORCED or OVERRIDE GCS policy.
&lt;br /&gt;
  When a GCS operation is locked, a program cannot change this operation
&lt;br /&gt;
  status via the prctl syscall.  This prevents disabling or corrupting the
&lt;br /&gt;
  GCS shadow stack during runtime.
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;On AArch64 targets, log, exp, sin, cas, sinh, cosh, asinh, acosh, atanh
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  single and double precision special cases have been vectorized for SVE and
&lt;br /&gt;
  AdvSIMD, and vector variants of powr have been added.
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;On RISC-V targets, vector extension optimized variants of memcmp, memccpy,
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  memchr, memcpy, memmove, stpncpy, strcmp, strchr, strcpy, strncmp, strncpy,
&lt;br /&gt;
  strlen, and strrchr have been added.
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;On PowerPC, memchr optimized for Power10 has been re-added.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Support for LoongArch32 has been added.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pre-built ld.so.cache files can be installed with ldconfig.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A new locale has been added: hrx_BR (Hunsrik language spoken in Brazil).
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
Deprecated and removed features, and other changes affecting compatibility:
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Although malloc and related functions currently return pointers
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  aligned to alignof (max_align_t), the documentation now says future
&lt;br /&gt;
  versions of glibc may relax alignment requirements for small allocations.
&lt;br /&gt;
  For example, a future malloc(1) might return a pointer with odd
&lt;br /&gt;
  alignment, because no object of size 1 can have a fundamental
&lt;br /&gt;
  alignment greater than 1.
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The s390-linux-gnu (31bit) configuration is no longer supported.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The --enable-memory-tagging configure option has been removed.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  The corresponding AArch64-specific functionality that was previously
&lt;br /&gt;
  activated by this flag has been removed as well.
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The --enable-static-nss configure option has been removed.  It had no
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  effect on the build since the NSS reorganization in glibc 2.33; its only
&lt;br /&gt;
  remaining behavior was to suppress the link-time warnings on the NSS
&lt;br /&gt;
  interface functions in libc.a, which are now emitted unconditionally.
&lt;br /&gt;

&lt;br /&gt;
Security related changes:
&lt;br /&gt;

&lt;br /&gt;
The following CVEs were fixed in this release, details of which can be
&lt;br /&gt;
found in the advisories directory of the release tarball:
&lt;br /&gt;

&lt;br /&gt;
  GLIBC-SA-2026-0005:
&lt;br /&gt;
    gethostbyaddr and gethostbyaddr_r may incorrectly handle DNS
&lt;br /&gt;
    response (CVE-2026-4437)
&lt;br /&gt;

&lt;br /&gt;
  GLIBC-SA-2026-0006:
&lt;br /&gt;
    gethostbyaddr and gethostbyaddr_r return invalid DNS hostnames
&lt;br /&gt;
    (CVE-2026-4438)
&lt;br /&gt;

&lt;br /&gt;
  GLIBC-SA-2026-0007:
&lt;br /&gt;
    iconv crash due to assertion failure with untrusted input
&lt;br /&gt;
    (CVE-2026-4046)
&lt;br /&gt;

&lt;br /&gt;
The following bugs were resolved with this release:
&lt;br /&gt;

&lt;br /&gt;
  [2363] libc: EOPNOTSUPP and ENOTSUP in errno.h must be different,
&lt;br /&gt;
    according to SUSv3
&lt;br /&gt;
  [3794] manual: iconv: &lt;a href="https://TRANSLIT"&gt;TRANSLIT&lt;/a&gt; and &lt;a href="https://IGNORE"&gt;IGNORE&lt;/a&gt; feature not documented
&lt;br /&gt;
  [15792] dynamic-link: [arm] ARM dynamic linker should save/restore
&lt;br /&gt;
    coprocessor registers
&lt;br /&gt;
  [20331] libc: fts ignores errors from readdir()
&lt;br /&gt;
  [20680] dynamic-link: ifunc resolver cannot access the thread pointer
&lt;br /&gt;
    with static linking
&lt;br /&gt;
  [22944] libc: fts cannot traverse paths which have a length longer
&lt;br /&gt;
    than USHRT_MAX
&lt;br /&gt;
  [25257] libc: sotruss: fix error message for '--f' argument
&lt;br /&gt;
  [25770] locale: newlocale memory leak in LOCPATH parsing and on error
&lt;br /&gt;
    paths
&lt;br /&gt;
  [27582] libc: x86_64: IFUNC in static user programs may crash when
&lt;br /&gt;
    built with -fstack-protector-all
&lt;br /&gt;
  [28218] dynamic-link: ld.so: ifunc resolver calls a lazy PLT. When
&lt;br /&gt;
    does it work?
&lt;br /&gt;
  [28817] libc: static-pie ifunc resolver tls failure
&lt;br /&gt;
  [28940] nss: __nss_database_get doesn't check for allocation failure
&lt;br /&gt;
  [30136] manual: Please document behaviour of iconv(3) when input is
&lt;br /&gt;
    untranslatable
&lt;br /&gt;
  [30304] nptl: nptl/tst-pthread-gdb-attach test fails with new libc
&lt;br /&gt;
    shared library version
&lt;br /&gt;
  [30769] malloc: malloc_trim is not working correctly for arenas other
&lt;br /&gt;
    than arena 0
&lt;br /&gt;
  [30976] dynamic-link: rtld: resolve ifunc relocations after
&lt;br /&gt;
    JUMP_SLOT/GLOB_DAT/etc
&lt;br /&gt;
  [30992] libc: alpha: setrlimit() with negative values besides
&lt;br /&gt;
    RLIM_INFINITY returns EPERM
&lt;br /&gt;
  [31901] libc: elf/tst-glibc-hwcaps-prepend-cache fails on i686
&lt;br /&gt;
  [33226] math: math-vector-fortran.h vs not ffast-math
&lt;br /&gt;
  [33626] libc: execvpe should skip inaccessible $PATH components
&lt;br /&gt;
  [33650] build: abilist.awk doesn't handle unversioned defined symbols
&lt;br /&gt;
  [33785] stdio: New streams are linked into global list before they are
&lt;br /&gt;
    fully initialized
&lt;br /&gt;
  [33848] build: Build fails at openat2.h, redefinition of 'struct
&lt;br /&gt;
    open_how'
&lt;br /&gt;
  [33882] libc: Recursion in nftw() causes stack overflow(CWE-674)
&lt;br /&gt;
  [33904] build: error: '__vasprintf_chk' undeclared here
&lt;br /&gt;
  [33921] build: Building with Linux-7.0-rc1 errors on OPEN_TREE_CLONE
&lt;br /&gt;
  [33935] stdio: _IO_wfile_doallocate not linked correctly when linking
&lt;br /&gt;
    glibc statically
&lt;br /&gt;
  [33980] locale: iconv: ibm139x trigger assertion error when converting
&lt;br /&gt;
    to internal while lack enough room (CVE-2026-4046)
&lt;br /&gt;
  [33985] build: ld: cannot find -lgcc_s: No such file or directory
&lt;br /&gt;
  [33999] stdio: libio: potential dangling _IO_save_base or memory leak
&lt;br /&gt;
    in wgenops.c
&lt;br /&gt;
  [34006] stdio: libio: inconsistent fmemopen_write behavior on last \0
&lt;br /&gt;
  [34008] stdio: stdio-common: scanf %mc pattern will cause heap
&lt;br /&gt;
    overflow when width &amp;gt; 1024
&lt;br /&gt;
  [34014] nss: gethostbyaddr and gethostbyaddr_r may incorrectly handle
&lt;br /&gt;
    DNS response
&lt;br /&gt;
  [34015] nss: gethostbyaddr and gethostbyaddr_r return invalid DNS
&lt;br /&gt;
    hostnames
&lt;br /&gt;
  [34019] stdio: libio: undefined behavior when setbuf on open_memstream
&lt;br /&gt;
  [34033] network: resolv/ns_print.c: ns_sprintrrf TSIG path bypasses
&lt;br /&gt;
    buflen and can overflow caller buffer
&lt;br /&gt;
  [34064] dynamic-link: The unnecessary PT_NOTE check in when loading a
&lt;br /&gt;
    binary
&lt;br /&gt;
  [34069] network: Buffer overread in ns_sprintrrf with corrupted RDATA
&lt;br /&gt;
    field (CVE-2026-6238)
&lt;br /&gt;
  [34070] hurd: Calling open ("/dev/tty/", O_RDONLY) causes the program
&lt;br /&gt;
    to segfault
&lt;br /&gt;
  [34073] regex: regexec can mistakenly match with backrefs and the $
&lt;br /&gt;
    anchor
&lt;br /&gt;
  [34079] dynamic-link: THP segment load aligns all PT_LOAD segments to
&lt;br /&gt;
    THP page size
&lt;br /&gt;
  [34080] dynamic-link: Support THP segment load with THP enabled with
&lt;br /&gt;
    madvise
&lt;br /&gt;
  [34083] dynamic-link: __get_thp_mode and __get_thp_size are called
&lt;br /&gt;
    twice
&lt;br /&gt;
  [34090] libc: wordexp WRDE_APPEND rollback restores stale we_wordv,
&lt;br /&gt;
    leading to invalid free in wordfree
&lt;br /&gt;
  [34098] libc: Missing SUPPORT_STATIC_PIE in arm32
&lt;br /&gt;
  [34129] string: x86: Non-temporal memset unreachable on AMD Zen 3/4/5
&lt;br /&gt;
  [34144] libc: ld.so clobbers VFP registers during runtime linking
&lt;br /&gt;
  [34154] network: Segfault in sock_eq after res_init() returns -1, due
&lt;br /&gt;
    to stale _u._ext.nscount in __res_iclose
&lt;br /&gt;
  [34156] dynamic-link: dlsym(RTLD_DEFAULT, ...) from a constructor
&lt;br /&gt;
    SIGSEGVs when tail-called
&lt;br /&gt;
  [34164] dynamic-link: elf: IFUNC resolvers do not see static TLS
&lt;br /&gt;
    initialization
&lt;br /&gt;
  [34170] dynamic-link: elf:  IFUNC resolver reading global-
&lt;br /&gt;
    dynamic/TLSDESC __thread variable crashes inside __tls_get_addr
&lt;br /&gt;
  [34183] math: fma produces wrong results
&lt;br /&gt;
  [34192] nptl: pthread_setname_np opens /proc/&amp;lt;tid&amp;gt;/comm with O_RDWR
&lt;br /&gt;
    instead of O_WRONLY|O_CLOEXEC
&lt;br /&gt;
  [34196] libc: elf: static dlopen: pointer guard of the loaded
&lt;br /&gt;
    ld.so/libc.so is left uninitialized
&lt;br /&gt;
  [34197] dynamic-link: elf: Stack canary and pointer guard are
&lt;br /&gt;
    recoverable from AT_RANDOM (getauxval)
&lt;br /&gt;
  [34205] libc: aarch64: SIGSEGV in tunable_strcmp in static-pie
&lt;br /&gt;
    binaries run with a string tunable
&lt;br /&gt;
  [34208] stdio: scanf not pushback after matching failure
&lt;br /&gt;
  [34210] libc: elf/tst-glibc-hwcaps-prepend-cache fails on
&lt;br /&gt;
    armv7a-unknown-linux-gnueabihf
&lt;br /&gt;
  [34236] locale: Non-representable transliteration still causes iconv
&lt;br /&gt;
    to exit with 1 if &lt;a href="https://TRANSLIT"&gt;TRANSLIT&lt;/a&gt; is specified
&lt;br /&gt;
  [34289] network: ns_sprintrrf uses p_class, p_type internally
&lt;br /&gt;
  [34311] build: THP tests failed to link
&lt;br /&gt;
  [34347] libc: Incorrect trailing bitfield word of struct tcp_info
&lt;br /&gt;
  [34348] dynamic-link: FAIL: elf/tst-thp-1 if THP is disabled in kernel
&lt;br /&gt;
  [34351] build: Random test failures
&lt;br /&gt;
  [34355] build: [2.44 Regression] "make check -j7 subdirs=stdio-common"
&lt;br /&gt;
    no longer works
&lt;br /&gt;
  [34396] libc: sparc64-unknown-linux-gnu , Gentoo: &amp;gt;200 test failures,
&lt;br /&gt;
    SIGILL in many binaries
&lt;br /&gt;
  [34398] string: Truncated strncpy on s390x z900 ifunc variant
&lt;br /&gt;

&lt;br /&gt;
Release Notes
&lt;br /&gt;
=============
&lt;br /&gt;

&lt;br /&gt;
&lt;a href="https://sourceware.org/glibc/wiki/Release/2.44"&gt;https://sourcewar ... wiki/Release/2.44&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Contributors
&lt;br /&gt;
============
&lt;br /&gt;

&lt;br /&gt;
This release was made possible by the contributions of many people.
&lt;br /&gt;
The maintainers are grateful to everyone who has contributed
&lt;br /&gt;
changes or bug reports.  These include:
&lt;br /&gt;

&lt;br /&gt;
Adam Yi
&lt;br /&gt;
Adhemerval Zanella
&lt;br /&gt;
Alejandro Colomar
&lt;br /&gt;
Andreas K. Hüttel
&lt;br /&gt;
Andreas Schwab
&lt;br /&gt;
Arjun Shankar
&lt;br /&gt;
Aurelien Jarno
&lt;br /&gt;
Avinal Kumar
&lt;br /&gt;
Brian Jorgensen
&lt;br /&gt;
Carlos O'Donell
&lt;br /&gt;
Carlos Peón Costa
&lt;br /&gt;
Charlotte Mcmenamin
&lt;br /&gt;
Collin Funk
&lt;br /&gt;
Cosmina Dunca
&lt;br /&gt;
DJ Delorie
&lt;br /&gt;
Daan De Meyer
&lt;br /&gt;
Deng Jianbo
&lt;br /&gt;
Dev Jain
&lt;br /&gt;
Diego Nieto Cid
&lt;br /&gt;
Dmitry Kovalenko
&lt;br /&gt;
Dylan Fleming
&lt;br /&gt;
Etienne Brateau
&lt;br /&gt;
Fabian Rast
&lt;br /&gt;
Florian Weimer
&lt;br /&gt;
Frédéric Bérat
&lt;br /&gt;
Garccez
&lt;br /&gt;
George Hu
&lt;br /&gt;
H.J. Lu
&lt;br /&gt;
Jakub Jelinek
&lt;br /&gt;
Jiamei Xie
&lt;br /&gt;
Jiho Lee
&lt;br /&gt;
Jiri Stransky
&lt;br /&gt;
John David Anglin
&lt;br /&gt;
Jonathan Wakely
&lt;br /&gt;
Josef Johansson
&lt;br /&gt;
Joseph Myers
&lt;br /&gt;
Justus Winter
&lt;br /&gt;
Luca Boccassi
&lt;br /&gt;
Lucas Chollet
&lt;br /&gt;
Martin Coufal
&lt;br /&gt;
Matt Turner
&lt;br /&gt;
Michael Ford
&lt;br /&gt;
Michael Jeanson
&lt;br /&gt;
Michael Kelly
&lt;br /&gt;
Mike FABIAN
&lt;br /&gt;
Mike Kelly
&lt;br /&gt;
Muhammad Kamran
&lt;br /&gt;
Nicolas Boulenguez
&lt;br /&gt;
Paul Eggert
&lt;br /&gt;
Peter Bergner
&lt;br /&gt;
Peter Collingbourne
&lt;br /&gt;
Petr Menšík
&lt;br /&gt;
Pierre Blanchard
&lt;br /&gt;
Pino Toscano
&lt;br /&gt;
Pádraig Brady
&lt;br /&gt;
Richard Wild
&lt;br /&gt;
Rocket Ma
&lt;br /&gt;
RyotaSaito
&lt;br /&gt;
Sachin Monga
&lt;br /&gt;
Sajan Karumanchi
&lt;br /&gt;
Sam James
&lt;br /&gt;
Samuel Balazi
&lt;br /&gt;
Samuel Thibault
&lt;br /&gt;
Sana Kazi
&lt;br /&gt;
Sergey Kolosov
&lt;br /&gt;
Shamil Abdulaev
&lt;br /&gt;
Shengwen Cheng
&lt;br /&gt;
Siddhesh Poyarekar
&lt;br /&gt;
Stefan Liebler
&lt;br /&gt;
Thomas Daubney
&lt;br /&gt;
Tomasz Kamiński
&lt;br /&gt;
Uros Bizjak
&lt;br /&gt;
WANG Rui
&lt;br /&gt;
Weihong Ye
&lt;br /&gt;
Weixie Cui
&lt;br /&gt;
Wilco Dijkstra
&lt;br /&gt;
Xi Ruoyao
&lt;br /&gt;
Xiang Gao
&lt;br /&gt;
Yao Zihong
&lt;br /&gt;
Yunze Zhu
&lt;br /&gt;
Yury Khrustalev
&lt;br /&gt;
Zihong Yao
&lt;br /&gt;
mengqinggang
&lt;br /&gt;
xiejiamei
&lt;br /&gt;
zombie12138
&lt;br /&gt;

&lt;br /&gt;
We would like to call out the following and thank them for their
&lt;br /&gt;
tireless patch review:
&lt;br /&gt;

&lt;br /&gt;
Adhemerval Zanella 
&lt;br /&gt;
Andreas K. Hüttel
&lt;br /&gt;
Arjun Shankar
&lt;br /&gt;
Aurelien Jarno
&lt;br /&gt;
caiyinyu
&lt;br /&gt;
Carlos O'Donell
&lt;br /&gt;
Collin Funk
&lt;br /&gt;
DJ Delorie
&lt;br /&gt;
Florian Weimer
&lt;br /&gt;
Frédéric Bérat
&lt;br /&gt;
Ganesh Gopalasubramanian
&lt;br /&gt;
H.J. Lu
&lt;br /&gt;
JiangNing
&lt;br /&gt;
Mathieu Desnoyers
&lt;br /&gt;
Paul Eggert
&lt;br /&gt;
Paul Zimmermann
&lt;br /&gt;
Peter Bergner
&lt;br /&gt;
Sam James
&lt;br /&gt;
Samuel Thibault
&lt;br /&gt;
Siddhesh Poyarekar
&lt;br /&gt;
Stefan Liebler
&lt;br /&gt;
Sunil K Pandey
&lt;br /&gt;
Wilco Dijkstra
&lt;br /&gt;
Yury Khrustalev&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Mon, 27 Jul 2026 14:36:46 +0000</pubDate>

</item> 
<item>
	<title>health @ Savannah: GNU Health en la facultad de Ciencias Sociales de la Universidad de Buenos Aires</title>
	<guid>https://savannah.gnu.org/news/?id=10917</guid>
	<link>https://savannah.gnu.org/news/?id=10917</link>
     <description>  &lt;p&gt;Los próximos días 5, 6 y 7 de agosto tendrán lugar las XVII Jornadas Nacionales de Debate Interdisciplinario en Salud y Población “Investigar e intervenir en salud en tiempos de negacionismos y retrocesos”, organizadas por el Área de Salud y Población del Instituto de Investigaciones Gino Germani de la Facultad de Ciencias Sociales de la Universidad de Buenos Aires (UBA).
&lt;br /&gt;

&lt;br /&gt;
Luis Falcón (GNU Solidario) junto al Dr. Fernando Sassetti (UNER) presentarán en la sección "Desigualdades Sociales de la Salud", con el título "Software Libre como modelo de equidad, privacidad, soberanía tecnológica y sostenibilidad en salud. El caso de GNU Health".
&lt;br /&gt;

&lt;br /&gt;
Para la comunidad de GNU Health es un privilegio y un honor ser parte de este tan importante evento que lucha por la dignidad del individuo y de la comunidad, por un sistema sanitario público, de calidad y universal. Un sistema y un derecho hoy seriamente  comprometido y amenazado por las grandes corporaciones financieras y tecnológicas.
&lt;br /&gt;

&lt;br /&gt;
Haciendo alusión al título de las jornadas, la comunidad GNU y la filosofía del Software Libre representan el faro moral para Investigar e intervenir en salud en tiempos de negacionismos y retrocesos.
&lt;br /&gt;

&lt;br /&gt;
¡Nos vemos en Buenos Aires!&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Thu, 23 Jul 2026 12:41:27 +0000</pubDate>

</item> 
<item>
	<title>osip @ Savannah: osip2 [5.3.2]</title>
	<guid>https://savannah.gnu.org/news/?id=10916</guid>
	<link>https://savannah.gnu.org/news/?id=10916</link>
     <description>  &lt;p&gt;A new security release was published today! A minor Out-of-bounds Read was discovered. And fixed!
&lt;br /&gt;

&lt;br /&gt;
No confidential impact is possible.
&lt;br /&gt;
A very low risk of crash is possible.
&lt;br /&gt;

&lt;br /&gt;
Enjoy &amp;amp; update!
&lt;br /&gt;
Aymeric&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Wed, 22 Jul 2026 23:17:40 +0000</pubDate>

</item> 
<item>
	<title>parallel @ Savannah: GNU Parallel 20260722 ('Chat Control') released [stable]</title>
	<guid>https://savannah.gnu.org/news/?id=10915</guid>
	<link>https://savannah.gnu.org/news/?id=10915</link>
     <description>  &lt;p&gt;GNU Parallel 20260722 ('Chat Control')  has been released. It is available for download at: lbry://@GnuParallel:4
&lt;br /&gt;

&lt;br /&gt;
Quote of the month:
&lt;br /&gt;

&lt;br /&gt;
  gnu parallelすごい！！！
&lt;br /&gt;
    -- たらたら@nosennyuu@twitter
&lt;br /&gt;

&lt;br /&gt;
New in this release:
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bug fixes and man page updates.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;

&lt;br /&gt;
GNU Parallel - For people who live life in the parallel lane.
&lt;br /&gt;

&lt;br /&gt;
If you like GNU Parallel record a video testimonial: Say who you are, what you use GNU Parallel for, how it helps you, and what you like most about it. Include a command that uses GNU Parallel if you feel like it.
&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;h2&gt;About GNU Parallel&lt;/h2&gt;
&lt;p&gt;
&lt;br /&gt;
GNU Parallel is a shell tool for executing jobs in parallel using one or more computers. A job can be a single command or a small script that has to be run for each of the lines in the input. The typical input is a list of files, a list of hosts, a list of users, a list of URLs, or a list of tables. A job can also be a command that reads from a pipe. GNU Parallel can then split the input and pipe it into commands in parallel.
&lt;br /&gt;

&lt;br /&gt;
If you use xargs and tee today you will find GNU Parallel very easy to use as GNU Parallel is written to have the same options as xargs. If you write loops in shell, you will find GNU Parallel may be able to replace most of the loops and make them run faster by running several jobs in parallel. GNU Parallel can even replace nested loops.
&lt;br /&gt;

&lt;br /&gt;
GNU Parallel makes sure output from the commands is the same output as you would get had you run the commands sequentially. This makes it possible to use output from GNU Parallel as input for other programs.
&lt;br /&gt;

&lt;br /&gt;
For example you can run this to convert all jpeg files into png and gif files and have a progress bar:
&lt;br /&gt;

&lt;br /&gt;
  parallel --bar convert {1} {1.}.{2} ::: *.jpg ::: png gif
&lt;br /&gt;

&lt;br /&gt;
Or you can generate big, medium, and small thumbnails of all jpeg files in sub dirs:
&lt;br /&gt;

&lt;br /&gt;
  find . -name '*.jpg' |
&lt;br /&gt;
    parallel convert -geometry {2} {1} {1//}/thumb{2}_{1/} :::: - ::: 50 100 200
&lt;br /&gt;

&lt;br /&gt;
You can find more about GNU Parallel at: &lt;a href="http://www.gnu.org/s/parallel/"&gt;http://www.gnu ... rg/s/parallel/&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
You can install GNU Parallel in just 10 seconds with:
&lt;br /&gt;

&lt;br /&gt;
    $ (wget -O - pi.dk/3 || lynx -source pi.dk/3 || curl pi.dk/3/ || \
&lt;br /&gt;
       fetch -o - &lt;a href="http://pi.dk/3"&gt;http://pi.dk/3&lt;/a&gt; ) &amp;gt; install.sh
&lt;br /&gt;
    $ sha1sum install.sh | grep c555f616391c6f7c28bf938044f4ec50
&lt;br /&gt;
    12345678 c555f616 391c6f7c 28bf9380 44f4ec50
&lt;br /&gt;
    $ md5sum install.sh | grep 707275363428aa9e9a136b9a7296dfe4
&lt;br /&gt;
    70727536 3428aa9e 9a136b9a 7296dfe4
&lt;br /&gt;
    $ sha512sum install.sh | grep b24bfe249695e0236f6bc7de85828fe1f08f4259
&lt;br /&gt;
    83320d89 f56698ec 77454856 895edc3e aa16feab 2757966e 5092ef2d 661b8b45
&lt;br /&gt;
    b24bfe24 9695e023 6f6bc7de 85828fe1 f08f4259 6ce5480a 5e1571b2 8b722f21
&lt;br /&gt;
    $ bash install.sh
&lt;br /&gt;

&lt;br /&gt;
Watch the intro video on &lt;a href="http://www.youtube.com/playlist?list=PL284C9FF2488BC6D1"&gt;http://www.youtub ... L284C9FF2488BC6D1&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Walk through the tutorial (man parallel_tutorial). Your command line will love you for it.
&lt;br /&gt;

&lt;br /&gt;
When using programs that use GNU Parallel to process data for publication please cite:
&lt;br /&gt;

&lt;br /&gt;
O. Tange (2018): GNU Parallel 2018, March 2018, &lt;a href="https://doi.org/10.5281/zenodo.1146014"&gt;https://doi.org/1 ... 81/zenodo.1146014&lt;/a&gt;.
&lt;br /&gt;

&lt;br /&gt;
If you like GNU Parallel:
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Give a demo at your local user group/team/colleagues
&lt;/li&gt;
&lt;li&gt;Post the intro videos on Reddit/Diaspora*/forums/blogs/ Identi.ca/Google+/Twitter/Facebook/Linkedin/mailing lists
&lt;/li&gt;
&lt;li&gt;Get the merchandise &lt;a href="https://gnuparallel.threadless.com/designs/gnu-parallel"&gt;https://gnuparall ... igns/gnu-parallel&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Request or write a review for your favourite blog or magazine
&lt;/li&gt;
&lt;li&gt;Request or build a package for your favourite distribution (if it is not already there)
&lt;/li&gt;
&lt;li&gt;Invite me for your next conference
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
If you use programs that use GNU Parallel for research:
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Please cite GNU Parallel in you publications (use --citation)
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
If GNU Parallel saves you money:
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;(Have your company) donate to FSF &lt;a href="https://my.fsf.org/donate/"&gt;https://my.f ... .org/donate/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;h2&gt;About GNU SQL&lt;/h2&gt;
&lt;p&gt;
&lt;br /&gt;
GNU sql aims to give a simple, unified interface for accessing databases through all the different databases' command line clients. So far the focus has been on giving a common way to specify login information (protocol, username, password, hostname, and port number), size (database and table size), and running queries.
&lt;br /&gt;

&lt;br /&gt;
The database is addressed using a DBURL. If commands are left out you will get that database's interactive shell.
&lt;br /&gt;

&lt;br /&gt;
When using GNU SQL for a publication please cite:
&lt;br /&gt;

&lt;br /&gt;
O. Tange (2011): GNU SQL - A Command Line Tool for Accessing Different Databases Using DBURLs, ;login: The USENIX Magazine, April 2011:29-32.
&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;h2&gt;About GNU Niceload&lt;/h2&gt;
&lt;p&gt;
&lt;br /&gt;
GNU niceload slows down a program when the computer load average (or other system activity) is above a certain limit. When the limit is reached the program will be suspended for some time. If the limit is a soft limit the program will be allowed to run for short amounts of time before being suspended again. If the limit is a hard limit the program will only be allowed to run when the system is below the limit.&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Tue, 21 Jul 2026 14:39:00 +0000</pubDate>

</item> 
<item>
	<title>GNUnet News: libgnunetchat 0.8.0</title>
	<guid>https://gnunet.org/en/news/2026-07-libgnunetchat-0.8.0.html</guid>
	<link>https://gnunet.org/en/news/2026-07-libgnunetchat-0.8.0.html</link>
     <description>  &lt;article id="newspost-content"&gt;
 
  &lt;h1&gt;
   libgnunetchat 0.8.0 released
  &lt;/h1&gt;
  &lt;p&gt;
   We are pleased to announce the release of libgnunetchat 0.8.0.
   &lt;br /&gt;
   This is a minor new release bringing compatibility with the major changes in latest GNUnet release 0.28.0. Some minor issues in the API got fixed. Additionally the library was updated to make use of the newer PILS service and an additional layer of encryption for shared files got removed. It is intended to rely on the encryption layer of the FS service in GNUnet for that in the future to reduce overall complexity.
  &lt;/p&gt;
  &lt;p&gt;
   Older releases of the applications using libgnunetchat stay compatible with this release.
  &lt;/p&gt;
  &lt;h4&gt;
   Download links
  &lt;/h4&gt;
  &lt;ul&gt;
   &lt;li&gt;
    &lt;a href="http://ftpmirror.gnu.org/gnunet/libgnunetchat-0.8.0.tar.gz"&gt;
     libgnunetchat-0.8.0.tar.gz
    &lt;/a&gt;
   &lt;/li&gt;
   &lt;li&gt;
    &lt;a href="http://ftpmirror.gnu.org/gnunet/libgnunetchat-0.8.0.tar.gz.sig"&gt;
     libgnunetchat-0.8.0.tar.gz.sig
    &lt;/a&gt;
   &lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;
   The GPG key used to sign is:
   &lt;a href="https://gnunet.org/~schanzen/3D11063C10F98D14BD24D1470B0998EF86F59B6A"&gt;
    3D11063C10F98D14BD24D1470B0998EF86F59B6A
   &lt;/a&gt;
  &lt;/p&gt;
  &lt;p&gt;
   Note that due to mirror synchronization, not all links may be functional
early after the release. For direct access try
   &lt;a href="http://ftp.gnu.org/gnu/gnunet/"&gt;
    http://ftp.gnu.org/gnu/gnunet/
   &lt;/a&gt;
  &lt;/p&gt;
  &lt;h4&gt;
   Noteworthy changes in 0.8.0
  &lt;/h4&gt;
  &lt;ul&gt;
   &lt;li&gt;
    Remove additional file encryption layer besides FS implicit layer
   &lt;/li&gt;
   &lt;li&gt;
    Fix issue creating duplicate contexts/chats for individual contacts
   &lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;
   A detailed list of changes can be found in the
   &lt;a href="https://git.gnunet.org/libgnunetchat.git/tree/ChangeLog"&gt;
    ChangeLog
   &lt;/a&gt;
   .
  &lt;/p&gt;
 
&lt;/article&gt; </description> 
	<pubDate>Fri, 17 Jul 2026 22:00:00 +0000</pubDate>

</item> 
</channel>
</rss>