<?xml version="1.0"?>
<rss version="2.0">

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


<item>
	<title>GNU Guix: Write package definitions in a breeze</title>
	<guid>https://guix.gnu.org/blog/2023/write-package-definitions-in-a-breeze//</guid>
	<link>https://guix.gnu.org/blog/2023/write-package-definitions-in-a-breeze//</link>
     <description>  &lt;p&gt;More than 28,000 packages are available in Guix today, not counting
third-party channels.  That’s a lot—the &lt;a href=&quot;https://repology.org/&quot;&gt;5th largest GNU/Linux
distro&lt;/a&gt;!  But it’s nothing if the one package you
care about is missing.  So even you, dear reader, may one day find
yourself defining a package for your beloved deployment tool.  This post
introduces a new tool poised to significantly lower the barrier to
writing new packages.&lt;/p&gt;&lt;h1&gt;Introducing Guix Packager&lt;/h1&gt;&lt;p&gt;&lt;a href=&quot;https://guix.gnu.org/manual/devel/en/html_node/Defining-Packages.html&quot;&gt;Defining
packages&lt;/a&gt;
for Guix is not all that hard but, as always, it’s much harder the first
time you do it, especially when starting from a blank page and/or not
being familiar with the programming environment of Guix.  &lt;a href=&quot;https://guix-hpc.gitlabpages.inria.fr/guix-packager/&quot;&gt;Guix
Packager&lt;/a&gt; is a new
web user interface to get you started—&lt;a href=&quot;https://guix-hpc.gitlabpages.inria.fr/guix-packager/&quot;&gt;try
it!&lt;/a&gt;.  It arrived
right in time as an aid to the &lt;a href=&quot;https://hpc.guix.info/events/2023/workshop/program/#how-to-get-started-writing-guix-packages&quot;&gt;packaging
tutorial&lt;/a&gt;
given last week at the Workshop on Reproducible Software Environments.&lt;/p&gt;&lt;p&gt;&lt;img alt=&quot;Screenshot showing the Guix Packager interface.&quot; src=&quot;https://guix.gnu.org/static/blog/img/guix-packager.gif&quot; /&gt;&lt;/p&gt;&lt;p&gt;The interface aims to be intuitive: fill in forms on the left
and it produces a correct, ready-to-use package definition on the right.
Importantly, it helps you avoid pitfalls that trip up many newcomers:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;When you add a dependency in one of the “Inputs” fields, it adds the
right variable name in the generated code &lt;em&gt;and&lt;/em&gt; imports the right
&lt;a href=&quot;https://guix.gnu.org/manual/devel/en/html_node/Package-Modules.html&quot;&gt;package
module&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Likewise, you can choose a license and be sure the &lt;code&gt;license&lt;/code&gt; field
will refer to the right variable representing that license.&lt;/li&gt;&lt;li&gt;You can turn tests on and off, and add configure flags.  These
translate to a valid &lt;code&gt;arguments&lt;/code&gt; field of your package, letting you
discover the likes of &lt;a href=&quot;https://guix.gnu.org/cookbook/en/html_node/A-Scheme-Crash-Course.html&quot;&gt;keyword
arguments&lt;/a&gt;
and
&lt;a href=&quot;https://guix.gnu.org/manual/en/html_node/G_002dExpressions.html&quot;&gt;G-expressions&lt;/a&gt;
without having to first dive into the manual.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Pretty cool, no?&lt;/p&gt;&lt;h1&gt;Implementation&lt;/h1&gt;&lt;p&gt;All the credit for this tool goes to co-worker and intrepid hacker
Philippe Virouleau.  A unique combination of paren aversion and web
development superpowers—unique in the Guix community—led
Philippe to develop the whole thing in a glimpse (says Ludovic!).&lt;/p&gt;&lt;p&gt;The purpose was to provide a single view to be able to edit a package recipe,
therefore the application is a &lt;em&gt;single-page application&lt;/em&gt; (SPA) written in
using the UI library Philippe is most comfortable with: &lt;a href=&quot;https://react.dev/&quot;&gt;React&lt;/a&gt;,
and &lt;a href=&quot;https://mui.com/material-ui/&quot;&gt;MaterialUI&lt;/a&gt; for styling the components.
It&#39;s built with &lt;a href=&quot;https://www.typescriptlang.org/&quot;&gt;TypeScript&lt;/a&gt;, and the library
part actually defines all the types needed to manipulate Guix packages and their
components (such as build systems or package sources).
One of the more challenging parts was to be able to provide fast and helpful “search as you
type” results over the 28k+ packages. It required a combination of
MaterialUI&#39;s &lt;a href=&quot;https://mui.com/material-ui/react-autocomplete/#virtualization&quot;&gt;virtualized inputs&lt;/a&gt;,
as well as caching the packages data in the browser&#39;s local storage,
when possible (packaging metadata itself is fetched from
&lt;code&gt;https://guix.gnu.org/packages.json&lt;/code&gt;, a generic representation of the
current package set).&lt;/p&gt;&lt;p&gt;While the feature set provides a great starting point, there are still a few
things that may be worth implementing.  For instance, only the GNU and
CMake build systems are supported so far; it would make sense to include
a few others (Python-related ones might be good candidates).&lt;/p&gt;&lt;p&gt;Running a local (development) version of the application can happen on
top of Guix, since—obviously—it&#39;s been developed with the &lt;code&gt;node&lt;/code&gt;
version packaged in Guix, using the quite standard &lt;code&gt;packages.json&lt;/code&gt; for
JavaScript dependencies installed through &lt;code&gt;npm&lt;/code&gt;.  &lt;a href=&quot;https://gitlab.inria.fr/guix-hpc/guix-packager/&quot;&gt;Contributions
welcome!&lt;/a&gt;&lt;/p&gt;&lt;h1&gt;Lowering the barrier to entry&lt;/h1&gt;&lt;p&gt;This neat tool complements a set of steps we’ve taken over time to make
packaging in Guix approachable.  Indeed, while package definitions are
actually code written in the Scheme language, the &lt;code&gt;package&lt;/code&gt; “language”
was designed &lt;a href=&quot;https://arxiv.org/abs/1305.4584&quot;&gt;from the get-go&lt;/a&gt; to be
fully declarative—think JSON with parens instead of curly braces and
semicolons.  More recently we &lt;a href=&quot;https://guix.gnu.org/en/blog/2021/the-big-change/&quot;&gt;simplified the way package inputs are
specified&lt;/a&gt; with an
eye on making package definitions less intimidating.&lt;/p&gt;&lt;p&gt;The &lt;a href=&quot;https://guix.gnu.org/manual/devel/en/html_node/Invoking-guix-import.html&quot;&gt;&lt;code&gt;guix import&lt;/code&gt;
command&lt;/a&gt;
also exists to make it easier to simplify packaging: it can generate a
package definition for anything available in other package
repositories such as PyPI, CRAN, Crates.io, and so forth.  If your
preference goes to curly braces rather than parens, it can also &lt;a href=&quot;https://guix.gnu.org/manual/devel/en/html_node/Invoking-guix-import.html#index-JSON_002c-import&quot;&gt;convert
a JSON package
description&lt;/a&gt;
to Scheme code.  Once you have your first &lt;code&gt;.scm&lt;/code&gt; file, &lt;code&gt;guix build&lt;/code&gt;
prints hints for common errors such missing module imports (those
&lt;code&gt;#:use-module&lt;/code&gt; stanzas).  We also put effort into providing &lt;a href=&quot;https://guix.gnu.org/manual/devel/en/html_node/Defining-Packages.html&quot;&gt;reference
documentation&lt;/a&gt;,
a &lt;a href=&quot;https://guix.gnu.org/en/videos/2020/packaging-part-two/&quot;&gt;video
tutorial&lt;/a&gt;, and
a &lt;a href=&quot;https://guix.gnu.org/cookbook/en/html_node/Packaging-Tutorial.html&quot;&gt;tutorial for more complex
packages&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Do share your experience &lt;a href=&quot;https://guix.gnu.org/contact&quot;&gt;with us&lt;/a&gt; and
until then, happy packaging!&lt;/p&gt;&lt;h1&gt;Acknowledgments&lt;/h1&gt;&lt;p&gt;Thanks to Felix Lechner and Timothy Sample for providing feedback on an
earlier draft of this post.&lt;/p&gt;&lt;h4&gt;About GNU Guix&lt;/h4&gt;&lt;p&gt;&lt;a href=&quot;https://guix.gnu.org&quot;&gt;GNU Guix&lt;/a&gt; is a transactional package manager and
an advanced distribution of the GNU system that &lt;a href=&quot;https://www.gnu.org/distros/free-system-distribution-guidelines.html&quot;&gt;respects user
freedom&lt;/a&gt;.
Guix can be used on top of any system running the Hurd or the Linux
kernel, or it can be used as a standalone operating system distribution
for i686, x86_64, ARMv7, AArch64 and POWER9 machines.&lt;/p&gt;&lt;p&gt;In addition to standard package management features, Guix supports
transactional upgrades and roll-backs, unprivileged package management,
per-user profiles, and garbage collection.  When used as a standalone
GNU/Linux distribution, Guix offers a declarative, stateless approach to
operating system configuration management.  Guix is highly customizable
and hackable through &lt;a href=&quot;https://www.gnu.org/software/guile&quot;&gt;Guile&lt;/a&gt;
programming interfaces and extensions to the
&lt;a href=&quot;http://schemers.org&quot;&gt;Scheme&lt;/a&gt; language.&lt;/p&gt; </description> 
	<pubDate>Fri, 24 Nov 2023 13:05:08 +0000</pubDate>

</item> 
<item>
	<title>Andy Wingo: tree-shaking, the horticulturally misguided algorithm</title>
	<guid>https://wingolog.org/2023/11/24/tree-shaking-the-horticulturally-misguided-algorithm</guid>
	<link>https://wingolog.org/archives/2023/11/24/tree-shaking-the-horticulturally-misguided-algorithm</link>
     <description>  &lt;div&gt;&lt;p&gt;Let&#39;s talk about tree-shaking!&lt;/p&gt;&lt;h3&gt;looking up from the trough&lt;/h3&gt;&lt;p&gt;But first, I need to talk about WebAssembly&#39;s dirty secret: despite the
hype, WebAssembly has had limited success on the web.&lt;/p&gt;&lt;p&gt;There is
&lt;a href=&quot;https://medium.com/@addyosmani/photoshop-is-now-on-the-web-38d70954365a&quot;&gt;Photoshop&lt;/a&gt;,
which does appear to be a real success.  5 years ago there was
&lt;a href=&quot;https://www.figma.com/blog/figma-faster/&quot;&gt;Figma&lt;/a&gt;, though they don&#39;t
talk much about Wasm these days.  There are quite a number of little NPM
libraries that use Wasm under the hood, usually compiled from C++ or
Rust.  I think
&lt;a href=&quot;https://dotnet.microsoft.com/en-us/apps/aspnet/web-apps/blazor&quot;&gt;Blazor&lt;/a&gt;
probably gets used for a few in-house corporate apps, though I could be
fooled by their marketing.&lt;/p&gt;&lt;p&gt;You might recall the hyped demos of 3D first-person-shooter
games with Unreal engine again from 5 years ago, but that was the previous major release of
Unreal and was always experimental; the current Unreal 5 does not support targetting
WebAssembly.&lt;/p&gt;&lt;p&gt;Don&#39;t get me wrong, I think WebAssembly is great.  It is having fine
success in off-the-web environments, and I think it is going to be a key
and growing part of the Web platform.  I suspect, though, that we are
only just now getting past the &lt;a href=&quot;https://en.wikipedia.org/wiki/Gartner_hype_cycle&quot;&gt;trough of
disillusionment&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;It&#39;s worth reflecting a bit on the nature of web Wasm&#39;s successes and
failures.  Taking Photoshop as an example, I think we can say that Wasm
does very well at bringing large C++ programs to the web.  I know that
it took quite some work, but I understand the end result to be
essentially the same source code, just compiled for a different target.&lt;/p&gt;&lt;p&gt;Similarly for the JavaScript module case, Wasm finds success in getting
legacy C++ code to the web, and as a way to write new web-targetting
Rust code.  These are often tasks that JavaScript doesn&#39;t do very well
at, or which need a shared implementation between client and server
deployments.&lt;/p&gt;&lt;p&gt;On the other hand, WebAssembly has not been a Web success for DOM-heavy
apps.  Nobody is talking about rewriting the front-end of 
&lt;a href=&quot;https://wordpress.com&quot;&gt;wordpress.com&lt;/a&gt; in Wasm, for example.  Why is
that?  It may sound like a silly question to you: Wasm just isn&#39;t good
at that stuff.  But &lt;i&gt;why&lt;/i&gt;?  If you dig down a bit, I think it&#39;s that the
programming models are just too different: the Web&#39;s primary programming
model is JavaScript, a language with dynamic typing and managed memory,
whereas WebAssembly 1.0 was about static typing and linear memory.
Getting to the DOM from Wasm was a hassle that was overcome only by the
most ardent of the true Wasm faithful.&lt;/p&gt;&lt;p&gt;Relatedly, Wasm has also not really been a success for languages that
aren&#39;t, like, C or Rust.  I am guessing that wordpress.com isn&#39;t written
mostly in C++.  One of the sticking points for this class of language.
is that C#, for example, will want to ship with a garbage collector, and
that it is annoying to have to do this.  Check my &lt;a href=&quot;https://wingolog.org/archives/2023/03/20/a-world-to-win-webassembly-for-the-rest-of-us&quot;&gt;article from March
this year for more
details&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Happily, this restriction is going away, as all browsers are going to
ship support for reference types and garbage collection within the next
months; Chrome and Firefox already ship Wasm GC, and Safari shouldn&#39;t be
far behind thanks to the efforts from my colleague Asumu Takikawa.  This
is an extraordinarily exciting development that I think will kick off a
whole &#39;nother Gartner hype cycle, as more languages start to update
their toolchains to support WebAssembly.&lt;/p&gt;&lt;h3&gt;if you don&#39;t like my peaches&lt;/h3&gt;&lt;p&gt;Which brings us to the meat of today&#39;s note: web Wasm will win where
compilers create compact code.  If your language&#39;s compiler toolchain
can manage to produce useful Wasm in a file that is less than a handful
of over-the-wire kilobytes, you can win.  If your compiler can&#39;t do that
yet, you will have to instead rely on hype and captured audiences for
adoption, which at best results in an unstable equilibrium until you
figure out what&#39;s next.&lt;/p&gt;&lt;p&gt;In the JavaScript world, managing bloat and deliverable size is a huge
industry.  Bundlers like &lt;a href=&quot;https://esbuild.github.io/&quot;&gt;esbuild&lt;/a&gt; are a
ubiquitous part of the toolchain, compiling down a set of JS modules to
a single file that should include only those functions and data types
that are used in a program, and additionally applying domain-specific
size-squishing strategies such as minification (making monikers more
minuscule).&lt;/p&gt;&lt;p&gt;Let&#39;s focus on tree-shaking.  The visual metaphor is that you write a
bunch of code, and you only need some of it for any given page.  So you
imagine a tree whose, um, branches are the modules that you use, and
whose leaves are the individual definitions in the modules, and you then
violently shake the tree, probably killing it and also annoying any
nesting birds.  The only thing that&#39;s left still attached is what is
actually needed.&lt;/p&gt;&lt;p&gt;This isn&#39;t how trees work: holding the trunk doesn&#39;t give you
information as to which branches are somehow necessary for the tree&#39;s
mission.  It also &lt;a href=&quot;https://pvk.ca/Blog/2012/02/19/fixed-points-and-strike-mandates/&quot;&gt;primes your mind to look for the wrong fixed
point&lt;/a&gt;,
removing unneeded code instead of keeping only the necessary code.&lt;/p&gt;&lt;p&gt;But, tree-shaking is an evocative name, and so despite its horticultural
and algorithmic inaccuracies, we will stick to it.&lt;/p&gt;&lt;p&gt;The thing is that maximal tree-shaking for languages with a thicker
run-time has not been a huge priority.  Consider Go: &lt;a href=&quot;https://zchee.github.io/golang-wiki/WebAssembly/&quot;&gt;according to the
golang wiki&lt;/a&gt;, the most
trivial program compiled to WebAssembly from Go is 2 megabytes, and
adding imports can make this go to 10 megabytes or more.  Or look at
Pyodide, the Python WebAssembly port: the &lt;a href=&quot;https://pyodide.org/en/stable/console.html&quot;&gt;REPL
example&lt;/a&gt; downloads about 20
megabytes of data.  These are fine sizes for technology demos or, in the
limit, very rich applications, but they aren&#39;t winners for web
development.&lt;/p&gt;&lt;h3&gt;shake a different tree&lt;/h3&gt;&lt;p&gt;To be fair, both the built-in Wasm support for Go and the Pyodide port
of Python both derive from the upstream toolchains, where producing
small binaries is nice but not necessary: on a server, who cares how big
the app is?  And indeed when targetting smaller devices, we tend to see
alternate implementations of the toolchain, for example
&lt;a href=&quot;https://micropython.org/&quot;&gt;MicroPython&lt;/a&gt; or
&lt;a href=&quot;https://github.com/tinygo-org/tinygo&quot;&gt;TinyGo&lt;/a&gt;.  TinyGo has a Wasm
back-end that can apparently go down to less than a kilobyte, even!&lt;/p&gt;&lt;p&gt;These alternate toolchains often come with &lt;a href=&quot;https://tinygo.org/docs/reference/lang-support/&quot;&gt;some restrictions or
peculiarities&lt;/a&gt;, and
although we can consider this to be an evil of sorts, it is to be
expected that the target platform exhibits some co-design feedback on
the language.  In particular, running in the sea of the DOM is
sufficiently weird that a Wasm-targetting Python program will
necessarily be different than a &quot;native&quot; Python program.  Still, I think
as toolchain authors we aim to provide the same language, albeit
possibly with a different implementation of the standard library.  I am
sure that the ClojureScript developers would prefer to remove their
&lt;a href=&quot;https://clojurescript.org/about/differences&quot;&gt;page documenting the differences with
Clojure&lt;/a&gt; if they could, and
perhaps if Wasm becomes a viable target for Clojurescript, they will.&lt;/p&gt;&lt;h3&gt;on the algorithm&lt;/h3&gt;&lt;p&gt;To recap: now that it supports GC, Wasm could be a winner for web
development in Python and other languages.  You would need a different
toolchain and an effective tree-shaking algorithm, so that user
experience does not degrade.  So let&#39;s talk about tree shaking!&lt;/p&gt;&lt;p&gt;I work on the &lt;a href=&quot;https://gitlab.com/spritely/guile-hoot/&quot;&gt;Hoot Scheme
compiler&lt;/a&gt;, which targets Wasm
with GC.  We manage to get down to 70 kB or so right now, in the minimal
&quot;main&quot; compilation unit, and are aiming for lower; auxiliary compilation
units that import run-time facilities (the current exception handler and
so on) from the main module can be sub-kilobyte.  Getting here has been
tricky though, and I think it would be even trickier for Python.&lt;/p&gt;&lt;p&gt;Some background: &lt;a href=&quot;https://wingolog.org/archives/2023/11/16/a-whiff-of-whiffle&quot;&gt;like
Whiffle&lt;/a&gt;,
the Hoot compiler prepends a
&lt;a href=&quot;https://gitlab.com/spritely/guile-hoot/-/blob/main/module/hoot/prelude.scm&quot;&gt;prelude&lt;/a&gt;
onto user code.  Tree-shakind happens in a number of places:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://git.savannah.gnu.org/cgit/guile.git/tree/module/language/tree-il/peval.scm&quot;&gt;partial
evaluation&lt;/a&gt;
will evaluate unused bindings for effect, possibly eliding them&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://git.savannah.gnu.org/cgit/guile.git/tree/module/language/tree-il/fix-letrec.scm&quot;&gt;fixing
letrec&lt;/a&gt;
will do the same&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;CPS frequently traverses the program, following only referenced
function, value, and control edges, e.g. via
&lt;a href=&quot;https://git.savannah.gnu.org/cgit/guile.git/tree/module/language/cps/renumber.scm&quot;&gt;renumbering&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;There is an explicit &lt;a href=&quot;https://git.savannah.gnu.org/cgit/guile.git/tree/module/language/cps/dce.scm&quot;&gt;dead-code
elimination&lt;/a&gt;
pass which tries to elide unused effect-free allocations, a situation
that can arise due to other optimizations&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Finally there is a &lt;a href=&quot;https://gitlab.com/spritely/guile-hoot/-/blob/main/module/hoot/stdlib.scm?ref_type=heads&quot;&gt;standard library written in raw-ish
WebAssembly&lt;/a&gt;,
whose definitions (globals, tables, imports, functions, etc) are
included in the residual binary &lt;a href=&quot;https://gitlab.com/spritely/guile-hoot/-/blob/main/module/wasm/link.scm?ref_type=heads&quot;&gt;only as
neeeded&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Generally speaking, procedure definitions (functions / closures) are the
easy part: you just include only those functions that are referenced by
the code.  In a language like Scheme, this gets you a long way.&lt;/p&gt;&lt;p&gt;However there are three immediate challenges.  One is that the
evaluation model for the definitions in the prelude is &lt;tt&gt;letrec*&lt;/tt&gt;: the
scope is recursive but ordered.  Binding values can call or refer to
previously defined values, or capture values defined later.  If
evaluating the value of a binding requires referring to a value only
defined later, then that&#39;s an error.  Again, for procedures this is
trivially OK, but as soon as you have non-procedure definitions,
sometimes the compiler won&#39;t be able to prove this nice &quot;only refers to
earlier bindings&quot; property.  In that case the &lt;a href=&quot;https://legacy.cs.indiana.edu/~dyb/pubs/letrec-reloaded-abstract.html&quot;&gt;fixing &lt;tt&gt;letrec&lt;/tt&gt;
(reloaded)&lt;/a&gt;
algorithm will end up residualizing bindings that are &lt;tt&gt;set!&lt;/tt&gt;, which of
all the tree-shaking passes above require the delicate DCE pass to
remove them.&lt;/p&gt;&lt;p&gt;Worse, some of those non-procedure definitions are &lt;i&gt;record types&lt;/i&gt;, which
have vtables that define how to print a record, how to check if a value
is an instance of this record, and so on.  These vtable callbacks can
end up keeping a lot more code alive even if they are never used.  We&#39;ll
get back to this later.&lt;/p&gt;&lt;p&gt;Similarly, say you print a string via
&lt;a href=&quot;https://www.r6rs.org/final/html/r6rs-lib/r6rs-lib-Z-H-9.html#node_idx_832&quot;&gt;&lt;tt&gt;display&lt;/tt&gt;&lt;/a&gt;.
Well now not only are you bringing in the whole buffered I/O facility,
but you are also calling a highly polymorphic function: &lt;tt&gt;display&lt;/tt&gt; can
print anything.  There&#39;s a case for bitvectors, so you pull in code for
bitvectors.  There&#39;s a case for pairs, so you pull in that code too.
And so on.&lt;/p&gt;&lt;p&gt;One solution is to instead call &lt;tt&gt;write-string&lt;/tt&gt;, which only writes
strings and not general data.  You&#39;ll still get the generic buffered I/O
facility (ports), though, even if your program only uses one kind of
port.&lt;/p&gt;&lt;p&gt;This brings me to my next point, which is that optimal tree-shaking is a
flow analysis problem.  Consider &lt;tt&gt;display&lt;/tt&gt;: if we know that a program
will never have bitvectors, then any code in &lt;tt&gt;display&lt;/tt&gt; that works on
bitvectors is dead and we can fold the branches that guard it.  But to
know this, we have to know what kind of arguments &lt;tt&gt;display&lt;/tt&gt; is called
with, and for that we need &lt;a href=&quot;https://wingolog.org/archives/2014/07/01/flow-analysis-in-guile&quot;&gt;higher-level flow
analysis&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The problem is exacerbated for Python in a few ways.  One, because
&lt;a href=&quot;https://matt.might.net/articles/implementation-of-kcfa-and-0cfa/&quot;&gt;object-oriented dispatch is higher-order
programming&lt;/a&gt;.
How do you know what &lt;tt&gt;foo.bar&lt;/tt&gt; actually means?  Depends on &lt;tt&gt;foo&lt;/tt&gt;, which
means you have to thread around representations of what &lt;tt&gt;foo&lt;/tt&gt; might be
everywhere and to everywhere&#39;s caller and everywhere&#39;s caller&#39;s caller
and so on.&lt;/p&gt;&lt;p&gt;Secondly, lookup in Python is generally more dynamic than in Scheme: you
have &lt;tt&gt;__getattr__&lt;/tt&gt; methods (is that it?; been a while since I&#39;ve done
Python) everywhere and users might indeed use them.  Maybe this is not
so bad in practice and flow analysis can exclude this kind of dynamic
lookup.&lt;/p&gt;&lt;p&gt;Finally, and perhaps relatedly, the object of tree-shaking in Python is
a mess of modules, rather than a big term with lexical bindings.  This
is like JavaScript, but without the established ecosystem of
tree-shaking bundlers; Python has its work cut out for some years to go.&lt;/p&gt;&lt;h3&gt;in short&lt;/h3&gt;&lt;p&gt;With GC, Wasm makes it thinkable to do DOM programming in languages
other than JavaScript.  It will only be feasible for mass use, though,
if the resulting Wasm modules are small, and that means significant
investment on each language&#39;s toolchain.  Often this will take the form
of alternate toolchains that incorporate experimental tree-shaking
algorithms, and whose alternate standard libraries facilitate the
tree-shaker.&lt;/p&gt;&lt;p&gt;Welp, I&#39;m off to lunch.  Happy wassembling, comrades!&lt;/p&gt;&lt;/div&gt; </description> 
	<pubDate>Fri, 24 Nov 2023 11:41:37 +0000</pubDate>

</item> 
<item>
	<title>parallel @ Savannah: GNU Parallel 20231122 (&#39;Grindavík&#39;) released</title>
	<guid>https://savannah.gnu.org/news/?id=10562</guid>
	<link>https://savannah.gnu.org/news/?id=10562</link>
     <description>  &lt;p&gt;GNU Parallel 20231122 (&#39;Grindavík&#39;) 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;
  Got around to using GNU parallel for the first time from a suggestion by @jdwasmuth ... now I&#39;m wishing I started using this years ago
&lt;br /&gt;
    -- Stefan Gavriliuc @GavriliucStefan@twitter
&lt;br /&gt;

&lt;br /&gt;
New in this release:
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;-a file1 -a +file2 will link file2 to file1 similar to ::::+
&lt;/li&gt;
&lt;li&gt;--bar shows total time when all jobs are done.
&lt;/li&gt;
&lt;li&gt;Bug fixes and man page updates.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
News about GNU Parallel:
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Using GNU Parallel in bash scripts to optimize python processes &lt;a href=&quot;https://climate-cms.org/posts/2023-11-02-gnu-parallel.html&quot;&gt;https://climate-cms.org/posts/2023-11-02-gnu-parallel.html&lt;/a&gt;
&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 &#39;*.jpg&#39; |
&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=&quot;http://www.gnu.org/s/parallel/&quot;&gt;http://www.gnu.org/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=&quot;http://pi.dk/3&quot;&gt;http://pi.dk/3&lt;/a&gt; ) &amp;gt; install.sh
&lt;br /&gt;
    $ sha1sum install.sh | grep 883c667e01eed62f975ad28b6d50e22a
&lt;br /&gt;
    12345678 883c667e 01eed62f 975ad28b 6d50e22a
&lt;br /&gt;
    $ md5sum install.sh | grep cc21b4c943fd03e93ae1ae49e28573c0
&lt;br /&gt;
    cc21b4c9 43fd03e9 3ae1ae49 e28573c0
&lt;br /&gt;
    $ sha512sum install.sh | grep ec113b49a54e705f86d51e784ebced224fdff3f52
&lt;br /&gt;
    79945d9d 250b42a4 2067bb00 99da012e c113b49a 54e705f8 6d51e784 ebced224
&lt;br /&gt;
    fdff3f52 ca588d64 e75f6033 61bd543f d631f592 2f87ceb2 ab034149 6df84a35
&lt;br /&gt;
    $ bash install.sh
&lt;br /&gt;

&lt;br /&gt;
Watch the intro video on &lt;a href=&quot;http://www.youtube.com/playlist?list=PL284C9FF2488BC6D1&quot;&gt;http://www.youtube.com/playlist?list=PL284C9FF2488BC6D1&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=&quot;https://doi.org/10.5281/zenodo.1146014&quot;&gt;https://doi.org/10.5281/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=&quot;https://gnuparallel.threadless.com/designs/gnu-parallel&quot;&gt;https://gnuparallel.threadless.com/designs/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=&quot;https://my.fsf.org/donate/&quot;&gt;https://my.fsf.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&#39; 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&#39;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>Thu, 23 Nov 2023 22:50:50 +0000</pubDate>

</item> 
<item>
	<title>gnuastro @ Savannah: Gnuastro development job at CEFCA/Spain for ESA&#39;s ARRAKIHS mission</title>
	<guid>https://savannah.gnu.org/news/?id=10559</guid>
	<link>https://savannah.gnu.org/news/?id=10559</link>
     <description>  &lt;p&gt;A (scientific) software developer position that has just opened up in CEFCA for the development of Gnuastro for the data reduction pipeline of European Space Agency (ESA&#39;s) newly approved ARRAKIHS mission (to be launched in 2030), as well as other data from our Astronomical Observatory of Javalambre (OAJ):
&lt;br /&gt;

&lt;br /&gt;
&lt;a href=&quot;https://www.cefca.es/cefca_en/reference_0119&quot;&gt;https://www.cefca.es/cefca_en/reference_0119&lt;/a&gt;
&lt;br /&gt;
(For 2 years, deadline: January 15th 2024)
&lt;br /&gt;

&lt;br /&gt;
ARRAKIHS is expected to last until ~2035 and we will be applying for future grants to keep the core pipeline team until the end of the project.
&lt;br /&gt;

&lt;br /&gt;
The job will be based in Teruel/Spain, which is a beautiful city (recognized as a UNESCO World heritage for its &quot;Mudejar&quot; architecture). Teruel just 1.5 hours from Valencia by car and with a population of 35000 people, everything is nicely within reach and you will not waste hours every day in traffic or long commutes as in large cities! Our observatory (OAJ) is also just 1.5 hours away by car (we have one of the darkest skies with fewest cloudy nights in continental Europe)!
&lt;br /&gt;

&lt;br /&gt;
As the ARRAKIHS pipeline engineer, the successful applicant will also be visiting other ARRAKIHS consortium members: IFCA/Santander, ESAC/Madrid; UCM/Madrid, IAA/Granada, EPFL/Switzerland, Univ. Lund/Sweden, Univ. Innsbruck/Austria.
&lt;br /&gt;

&lt;br /&gt;
The job will involve major developments in Gnuastro for the missing features or things that can be improved for Low Surface Brightness optimized reduction pipelines and high-level science from it (Gnuastro&#39;s MakeCatalog for example).
&lt;br /&gt;

&lt;br /&gt;
Once tested in the ARRAKIHS/OAJ pipelines, all those features will be brought into the core of Gnuastro for everyone to use in any pipeline! This is thus a major development in Gnuastro&#39;s history!
&lt;br /&gt;

&lt;br /&gt;
Anyone with a B.Sc degree or higher can apply! So please share this email with anyone you think may be interested. People with a M.Sc or PhD are also welcome to apply; it is &quot;scientific&quot;/Research software engineer position after all; and we expect to publish many papers on the algorithms/tools that we develop.
&lt;br /&gt;

&lt;br /&gt;
If you can&#39;t wait to get your hands dirty, and want to improve your profile for the application, there is a nice checklist in our Google Summer of Code guidelines to help you get started and fix a bug or two until the deadline to include in the application (you have almost two months from now):
&lt;br /&gt;

&lt;br /&gt;
&lt;a href=&quot;https://savannah.gnu.org/support/?110827#comment0&quot;&gt;https://savannah.gnu.org/support/?110827#comment0&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Please don&#39;t hesitate to ask any questions from the contact person in the main announcement above; we&#39;d be happy to help clarify any doubts.&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Wed, 22 Nov 2023 23:23:58 +0000</pubDate>

</item> 
<item>
	<title>FSF Blogs: FSF Giving Guide: Tech changes, freedom doesn&#39;t</title>
	<guid>http://www.fsf.org/blogs/community/fsf-giving-guide-tech-changes-freedom-doesnt</guid>
	<link>http://www.fsf.org/blogs/community/fsf-giving-guide-tech-changes-freedom-doesnt</link>
     <description>  This year&#39;s FSF Giving Guide is here: Make freedom your gift! </description> 
	<pubDate>Wed, 22 Nov 2023 21:32:36 +0000</pubDate>

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

</item> 
<item>
	<title>GNUnet News: RFC 9498: The GNU Name System</title>
	<guid>https://gnunet.org/en/news/2023-11-RFC9498.html</guid>
	<link>https://gnunet.org/en/news/2023-11-RFC9498.html</link>
     <description>  &lt;article id=&quot;newspost-content&quot;&gt;
 &lt;h1&gt;
  RFC 9498: The GNU Name System
 &lt;/h1&gt;
 &lt;p&gt;
  We are happy to announce that our
  &lt;i&gt;
   The GNU Name System
  &lt;/i&gt;
  (GNS) specification is now published as
  &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc9498.html&quot;&gt;
   RFC 9498
  &lt;/a&gt;
  .
 &lt;/p&gt;
 &lt;p&gt;
  GNS addresses long-standing
  &lt;a href=&quot;https://www.wired.com/2014/03/quantum/&quot;&gt;
   security
  &lt;/a&gt;
  and
  &lt;a href=&quot;https://roarmag.org/essays/nsa-leak-domain-name-system/&quot;&gt;
   privacy
  &lt;/a&gt;
  issues in the ubiquitous
  &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc882&quot;&gt;
   Domain Name System (DNS)
  &lt;/a&gt;
  .
  Previous attempts to secure DNS (
  &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc9364&quot;&gt;
   DNSSEC
  &lt;/a&gt;
  ) fail to address
  &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc8324&quot;&gt;
   critical security issues
  &lt;/a&gt;
  such as end-to-end security, query privacy, censorship, and centralization of root zone governance.
  After 40 years of patching, it is time for a new beginning.
 &lt;/p&gt;
 &lt;p&gt;
  The GNU Name System is our contribution towards a decentralized and
  censorship-resistant domain name resolution system that provides a
  privacy-enhancing alternative to the Domain Name System (DNS).
 &lt;/p&gt;
 &lt;p&gt;
  As part of our work on RFC 9498, we have also contributed to the specification
  of the
  &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc9476.html&quot;&gt;
   .alt top-level
  domain
  &lt;/a&gt;
  to be used by alternative name resolution systems and have
  established
  &lt;a href=&quot;https://gana.gnunet.org/dot-alt/dot_alt.html&quot;&gt;
   the GANA registry for &quot;.alt&quot;
  &lt;/a&gt;
  .
 &lt;/p&gt;
 &lt;p&gt;
  GNS is implemented according to RFC 9598 in GNUnet 0.20.0. It is also implemented
  as part of
  &lt;a href=&quot;https://git.gnunet.org/gnunet-go.git/&quot;&gt;
   GNUnet-Go
  &lt;/a&gt;
  .
 &lt;/p&gt;
 &lt;p&gt;
  We thank all reviewers for their comments.
  In particular, we thank D. J. Bernstein, S. Bortzmeyer, A. Farrel, E. Lear, and R. Salz for their insightful and detailed technical reviews.
  We thank J. Yao and J. Klensin for the internationalization reviews.
  We thank Dr. J. Appelbaum for suggesting the name &quot;GNU Name System&quot; and Dr. Richard Stallman for approving its use.
  We thank T. Lange and M. Wachs for their earlier contributions to the design and implementation of GNS. 
  We thank J. Yao and J. Klensin for the internationalization reviews.
  We thank
  &lt;a href=&quot;https://nlnet.nl&quot;&gt;
   NLnet
  &lt;/a&gt;
  and
  &lt;a href=&quot;https://nlnet.nl/project/GNS/&quot;&gt;
   NGI DISCOVERY
  &lt;/a&gt;
  for funding work on the GNU Name System.
 &lt;/p&gt;
 &lt;p&gt;
  The work does not stop here: We encourage further implementations of RFC 9498
  to learn more both in terms of technical documentation and actual deployment
  experiences.
  Further, we are currently working on the specification of the
  &lt;a href=&quot;https://lsd.gnunet.org/lsd0004&quot;&gt;
   R
   &lt;sup&gt;
    5
   &lt;/sup&gt;
   N DHT
  &lt;/a&gt;
  and
  &lt;a href=&quot;https://lsd.gnunet.org/lsd0003&quot;&gt;
   BFT Set Reconciliation
  &lt;/a&gt;
  which are underlying
  building blocks of GNS in GNUnet and not covered by RFC 9498.
 &lt;/p&gt;
&lt;/article&gt; </description> 
	<pubDate>Mon, 20 Nov 2023 23:00:00 +0000</pubDate>

</item> 
<item>
	<title>gettext @ Savannah: GNU gettext 0.22.4 released</title>
	<guid>https://savannah.gnu.org/news/?id=10544</guid>
	<link>https://savannah.gnu.org/news/?id=10544</link>
     <description>  &lt;p&gt;Download from &lt;a href=&quot;https://ftp.gnu.org/pub/gnu/gettext/gettext-0.22.4.tar.gz&quot;&gt;https://ftp.gnu.org/pub/gnu/gettext/gettext-0.22.4.tar.gz&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
This is a bug-fix 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;Bug fixes:
&lt;ul&gt;
&lt;li&gt;AM_GNU_GETTEXT now recognizes a statically built libintl on macOS and AIX.
&lt;/li&gt;
&lt;li&gt;Build fixes on AIX.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt; </description> 
	<pubDate>Sun, 19 Nov 2023 21:32:51 +0000</pubDate>

</item> 
<item>
	<title>Andy Wingo: a whiff of whiffle</title>
	<guid>https://wingolog.org/2023/11/16/a-whiff-of-whiffle</guid>
	<link>https://wingolog.org/archives/2023/11/16/a-whiff-of-whiffle</link>
     <description>  &lt;div&gt;&lt;p&gt;A couple nights ago I &lt;a href=&quot;https://wingolog.org/archives/2023/11/14/whiffle-a-purpose-built-scheme&quot;&gt;wrote about a superfluous Scheme
implementation&lt;/a&gt;
and promised to move on from sheepishly justifying my egregious behavior in
my next note, and finally mention some results from this experiment.
Well, no: I am back on my bullshit.  Tonight I write about a couple of
implementation details that discerning readers may find of interest:
value representation, the tail call issue, and the standard library.&lt;/p&gt;&lt;h3&gt;what is a value?&lt;/h3&gt;&lt;p&gt;As a Lisp, Scheme is one of the early &quot;dynamically typed&quot; languages.
These days when you say &quot;type&quot;, people immediately think &lt;a href=&quot;https://www.pure.ed.ac.uk/ws/files/20001186/propositions_as_types.pdf&quot;&gt;propositions
as
types&lt;/a&gt;,
mechanized proof of program properties, and so on.  But &quot;type&quot;
has another denotation which is all about values and almost not at all
about terms: one might say that
&lt;a href=&quot;https://man.scheme.org/vector-ref.3scm&quot;&gt;&lt;tt&gt;vector-ref&lt;/tt&gt;&lt;/a&gt; has a type, but
it&#39;s not part of a proof; it&#39;s just that if you try to &lt;tt&gt;vector-ref&lt;/tt&gt; a
pair instead of a vector, you get a run-time error.  You can imagine
values as being associated with &lt;i&gt;type tags&lt;/i&gt;: annotations that can be
inspected at run-time for, for example, the sort of error that
&lt;tt&gt;vector-ref&lt;/tt&gt; will throw if you call it on a pair.&lt;/p&gt;&lt;p&gt;Scheme systems usually have a finite set of type tags: there are
fixnums, booleans, strings, pairs, symbols, and such, and they all have
their own tag.  Even a Scheme system that provides facilities for
defining new disjoint types (&lt;tt&gt;define-record-type&lt;/tt&gt; et al) will implement these via a secondary type tag layer: for example that all record
instances are have the same primary tag, and that you have to retrieve
their record type descriptor to discriminate instances of different
record types.&lt;/p&gt;&lt;p&gt;Anyway.  In Whiffle there are immediate types and heap types.  All values
have a low-bit tag which is zero for heap objects and nonzero for
immediates.  For heap objects, the first word of the heap object has
tagging in the low byte as well.  The &lt;a href=&quot;https://github.com/wingo/whiffle/blob/main/include/whiffle/types.h#L43-L44&quot;&gt;3-bit heap tag for pairs is chosen so that
pairs can just be two words, with no header
word&lt;/a&gt;.
There is another 3-bit heap tag for forwarded objects, which is used but the
GC when evacuating a value.  Other objects &lt;a href=&quot;https://github.com/wingo/whiffle/blob/main/include/whiffle/types.h#L49-L57&quot;&gt;put their heap tags in the low 8
bits of the first word&lt;/a&gt;.
Additionally there is a &quot;busy&quot; tag word value, used to prevent races
when evacuating from multiple threads.&lt;/p&gt;&lt;p&gt;Finally, for generational collection of objects that can be &quot;large&quot; --
the definition of large depends on the collector implementation, and is
not nicely documented, but is more than, like, 256 bytes -- anyway these
objects might need to have space for a &quot;remembered&quot; bit in the object
themselves.  This is not the case for pairs but is the case for, say,
vectors: even though they are prolly smol, they might not be, and they
need space for a remembered bit in the header.&lt;/p&gt;&lt;h3&gt;tail calls&lt;/h3&gt;&lt;p&gt;When I started Whiffle, I thought, let&#39;s just compile each Scheme
function to a C function.  Since all functions have the same type, clang and gcc will have
no problem turning any tail call into a proper tail call.&lt;/p&gt;&lt;p&gt;This intuition was right and wrong: at optimization level &lt;tt&gt;-O2&lt;/tt&gt;, this
works great.  We don&#39;t even do any kind of loop recognition /
contification: loop iterations are tail calls and all is fine.  (Not the
most optimal implementation technique, but the assumption is that for
our test cases, GC costs will dominate.)&lt;/p&gt;&lt;p&gt;However, when something goes wrong, I will need to debug the program to
see what&#39;s up, and so you might think to compile at &lt;tt&gt;-O0&lt;/tt&gt; or &lt;tt&gt;-Og&lt;/tt&gt;.  In
that case, somehow gcc does not compile to tail calls.  One time while
debugging a program I was flummoxed at a segfault during the &lt;tt&gt;call&lt;/tt&gt;
instruction; turns out it was just stack overflow, and the &lt;tt&gt;call&lt;/tt&gt; was
trying to write the return address into an unmapped page.  For clang, I
could use the &lt;a href=&quot;https://clang.llvm.org/docs/AttributeReference.html#musttail&quot;&gt;&lt;tt&gt;musttail&lt;/tt&gt;
attribute&lt;/a&gt;;
perhaps I should, to allow myself to debug properly.&lt;/p&gt;&lt;p&gt;Not being able to debug at &lt;tt&gt;-O0&lt;/tt&gt; with gcc is annoying.  I feel like if GNU were an actual thing, we would have had the equivalent of a &lt;tt&gt;musttail&lt;/tt&gt; attribute 20 years ago already.  But it&#39;s not, and we still don&#39;t.&lt;/p&gt;&lt;h3&gt;stdlib&lt;/h3&gt;&lt;p&gt;So Whiffle makes C, and that C uses some &lt;a href=&quot;https://github.com/wingo/whiffle/blob/main/include/whiffle/vm.h&quot;&gt;primitives defined as inline
functions&lt;/a&gt;.
Whiffle actually &lt;a href=&quot;https://github.com/wingo/whiffle/blob/main/module/whiffle/input.scm#L42-L45&quot;&gt;lexically embeds user Scheme
code&lt;/a&gt;
with a
&lt;a href=&quot;https://github.com/wingo/whiffle/blob/main/runtime/prelude.scm&quot;&gt;prelude&lt;/a&gt;,
having exposed a &lt;a href=&quot;https://github.com/wingo/whiffle/blob/main/module/whiffle/primitives.scm&quot;&gt;set of
primitives&lt;/a&gt;
to that prelude and to user code.  The assumption is that the compiler
will open-code all primitives, so that the conceit of providing a
primitive from the Guile compilation host to the Whiffle guest magically
works out, and that any reference to a free variable is an error.  This
works well enough, and it&#39;s similar to &lt;a href=&quot;https://gitlab.com/spritely/guile-hoot/-/blob/main/module/hoot/compile.scm?ref_type=heads#L2592&quot;&gt;what we currently do in
Hoot&lt;/a&gt;
as well.&lt;/p&gt;&lt;p&gt;This is a quick and dirty strategy but it does let us &lt;a href=&quot;https://www.youtube.com/watch?v=lw6TaiXzHAE&quot;&gt;grow the
language&lt;/a&gt; to something
worth using.  I think I&#39;ll come back to this local maximum later if I
manage to write about what Hoot does with modules.&lt;/p&gt;&lt;h3&gt;coda&lt;/h3&gt;&lt;p&gt;So, that&#39;s Whiffle: the Guile compiler front-end for Scheme, applied to
an expression that prepends a user&#39;s program with a prelude, in a
lexical context of a limited set of primitives, compiling to very simple
C, in which tail calls are just &lt;tt&gt;return f(...)&lt;/tt&gt;, relying on the C
compiler to inline and optimize and all that.&lt;/p&gt;&lt;p&gt;Perhaps next up: some results on using Whiffle to test Whippet.  Until
then, good night!&lt;/p&gt;&lt;/div&gt; </description> 
	<pubDate>Thu, 16 Nov 2023 21:11:43 +0000</pubDate>

</item> 
<item>
	<title>FSF Blogs: Calling for Volunteers: Help FSF staff with the GNU Press shop</title>
	<guid>http://www.fsf.org/blogs/gnu-press/calling-for-volunteers-help-fsf-staff-with-the-gnu-press-shop</guid>
	<link>http://www.fsf.org/blogs/gnu-press/calling-for-volunteers-help-fsf-staff-with-the-gnu-press-shop</link>
    
	<pubDate>Thu, 16 Nov 2023 16:41:19 +0000</pubDate>

</item> 
<item>
	<title>FSF Blogs: Now&#39;s your chance to submit your session and nominations</title>
	<guid>http://www.fsf.org/blogs/community/nows-your-chance-to-submit-your-session-and-nominations</guid>
	<link>http://www.fsf.org/blogs/community/nows-your-chance-to-submit-your-session-and-nominations</link>
     <description>  LibrePlanet Call for Sessions ends Friday, November 17, and the deadline for Free Software Awards nominations is Tuesday, November 21. </description> 
	<pubDate>Wed, 15 Nov 2023 17:00:00 +0000</pubDate>

</item> 
<item>
	<title>FSF Blogs: Protecting free software against confusing additional restrictions</title>
	<guid>http://www.fsf.org/blogs/licensing/protecting-free-software-against-confusing-additional-restrictions</guid>
	<link>http://www.fsf.org/blogs/licensing/protecting-free-software-against-confusing-additional-restrictions</link>
     <description>  While we are pleased when people use GNU licenses to distribute and
license software, we condemn the use of unauthorized, confusing
derivatives of the licenses. In this article, we explain how users are
protected against restrictive terms introduced by people using GNU
licenses&#39; terms in drafting their own, new licenses. </description> 
	<pubDate>Tue, 14 Nov 2023 22:49:48 +0000</pubDate>

</item> 
<item>
	<title>Andy Wingo: whiffle, a purpose-built scheme</title>
	<guid>https://wingolog.org/2023/11/14/whiffle-a-purpose-built-scheme</guid>
	<link>https://wingolog.org/archives/2023/11/14/whiffle-a-purpose-built-scheme</link>
     <description>  &lt;div&gt;&lt;p&gt;Yesterday I &lt;a href=&quot;https://wingolog.org/archives/2023/11/13/i-accidentally-a-scheme&quot;&gt;promised an
apology&lt;/a&gt;
but didn&#39;t actually get past the admission of guilt.  Today the
defendant takes the stand, in the hope that an awkward
cross-examination will persuade the jury to take pity on a poor
misguided soul.&lt;/p&gt;&lt;p&gt;Which is to say, let&#39;s talk about
&lt;a href=&quot;https://github.com/wingo/whiffle&quot;&gt;Whiffle&lt;/a&gt;: what it actually is, what it is
doing for me, and why on earth it is that [I tell myself that] writing a
new programming language implementation is somehow preferable than
re-using an existing one.&lt;/p&gt;&lt;h3&gt;&lt;s&gt;graphic design&lt;/s&gt;garbage collection is my passion&lt;/h3&gt;&lt;p&gt;Whiffle is purpose-built to test the
&lt;a href=&quot;https://github.com/wingo/whippet&quot;&gt;Whippet&lt;/a&gt; garbage collection library.&lt;/p&gt;&lt;p&gt;Whiffle lets me create Whippet test cases in C, without actually writing
C.  C is fine and all, but the problem with it and garbage collection is
that you have to track all stack roots manually, and this is an
error-prone process.  Generating C means that I can more easily ensure
that each stack root is visitable by the GC, which lets me make test
cases with more confidence; if there is a bug, it is probably not
because of an untraced root.&lt;/p&gt;&lt;p&gt;Also, Whippet is mostly meant for programming language runtimes, not for
direct use by application authors.  In this use-case, probably you can
use less &quot;active&quot; mechanisms for ensuring root traceability: instead of
eagerly recording live values in some kind of
&lt;a href=&quot;https://github.com/v8/v8/blob/main/src/handles/handles.h&quot;&gt;handlescope&lt;/a&gt;,
you can keep a &lt;a href=&quot;https://github.com/v8/v8/blob/7fdc2728f2114b083ebbd24710a32fe4574c0c57/src/codegen/safepoint-table.h#L201&quot;&gt;side
table&lt;/a&gt;
that is only consulted as needed during garbage collection pauses.  In
particular since Scheme uses the &lt;a href=&quot;https://wingolog.org/archives/2014/03/17/stack-overflow&quot;&gt;stack as a data
structure&lt;/a&gt;, I
was worried that using handle scopes would somehow distort the
performance characteristics of the benchmarks.&lt;/p&gt;&lt;p&gt;Whiffle is not, however, a high-performance Scheme compiler.  It is not
for number-crunching, for example: garbage collectors don&#39;t care about
that, so let&#39;s not.  Also, Whiffle should not go to any effort to remove
allocations (&lt;a href=&quot;https://wingolog.org/archives/2014/08/25/revisiting-common-subexpression-elimination-in-guile&quot;&gt;sroa / gvn /
cse&lt;/a&gt;);
creating nodes in the heap is the purpose of the test case, and eliding
them via compiler heroics doesn&#39;t help us test the GC.&lt;/p&gt;&lt;p&gt;I settled on a
&lt;a href=&quot;https://wingolog.org/archives/2020/06/03/a-baseline-compiler-for-guile&quot;&gt;baseline-style&lt;/a&gt;
compiler, in which I re-use the Scheme front-end from
&lt;a href=&quot;https://gnu.org/s/guile&quot;&gt;Guile&lt;/a&gt; to expand macros and create an
&lt;a href=&quot;https://www.gnu.org/software/guile/manual/html_node/Tree_002dIL.html&quot;&gt;abstract syntax
tree&lt;/a&gt;.
I do run some optimizations on that AST; in the spirit of &lt;a href=&quot;https://www.youtube.com/watch?v=LIEX3tUliHw&quot;&gt;the macro
writer&#39;s bill of rights&lt;/a&gt;,
it does make sense to provide some basic reductions.  (These reductions
can be surprising, but I am used to the &lt;a href=&quot;https://wingolog.org/archives/2011/10/11/partial-evaluation-in-guile&quot;&gt;Guile&#39;s flavor of cp0
(peval)&lt;/a&gt;,
and this project is mostly for me, so I thought it was risk-free; I was
&lt;a href=&quot;https://mastodon.social/@wingo/111093597389556069&quot;&gt;almost right!&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;Anyway the result is that Whiffle uses an explicit stack.  A
&lt;a href=&quot;https://wingolog.org/archives/2023/10/16/on-safepoints&quot;&gt;safepoint&lt;/a&gt; for
a thread simply records its stack pointer: everything between the stack
base and the stack pointer is live.  I do have a lingering doubt about
the representativity of this compilation strategy; would a conclusion
drawn from Whippet apply to Guile, which uses a different stack
allocation strategy?  I think probably so but it&#39;s an unknown.&lt;/p&gt;&lt;h3&gt;what&#39;s not to love&lt;/h3&gt;&lt;p&gt;Whiffle also has a number of design goals that are better formulated in
the negative.  I mentioned compiler heroics as one thing to avoid, and
in general the desire for a well-understood correspondence between
source code and run-time behavior has a number of other corrolaries:
Whiffle is a pure ahead-of-time (AOT) compiler, as just-in-time (JIT)
compilation adds noise.  Worse, speculative JIT would add
unpredictability, which while good on the whole would be anathema to
understanding an isolated piece of a system like the GC.&lt;/p&gt;&lt;p&gt;Whiffle also should produce stand-alone C files, without a thick
run-time.  I need to be able to understand and reason about the residual
C programs, and depending on third-party libraries would hinder this
goal.&lt;/p&gt;&lt;p&gt;Oddly enough, users are also an anti-goal: as a compiler that only
exists to test a specific GC library, there is no sense in spending too
much time making Whiffle nicer for other humans, humans whose goal is
surely not just to test Whippet.  Whiffle is an interesting object, but
is not meant for actual use or users.&lt;/p&gt;&lt;h3&gt;corners: cut&lt;/h3&gt;&lt;p&gt;Another anti-goal is completeness with regards to any specific language
standard: the point is to test a GC, not to make a useful Scheme.
Therefore Whippet gets by just fine without flonums, fractions,
continuations (delimited or otherwise), multiple return values, ports,
or indeed any library support at all.  All of that just doesn&#39;t matter
for testing a GC.&lt;/p&gt;&lt;p&gt;That said, it has been useful to be able to import standard Scheme
garbage collection benchmarks, such as
&lt;a href=&quot;https://github.com/wingo/whiffle/blob/main/examples/earley.scm&quot;&gt;earley&lt;/a&gt;
or
&lt;a href=&quot;https://github.com/wingo/whiffle/blob/main/examples/nboyer.scm&quot;&gt;nboyer&lt;/a&gt;.
These have required very few modifications to run in Whippet, mostly
related to Whippet&#39;s test harness that wants to spawn multiple threads.&lt;/p&gt;&lt;h3&gt;and so?&lt;/h3&gt;&lt;p&gt;I think this evening we have elaborated a bit more about the &quot;how&quot;,
complementing yesterday&#39;s note about the &quot;what&quot;.  Tomorrow (?) I&#39;ll see
if I can dig in more to the &quot;why&quot;: what questions does Whiffle let me
ask of Whippet, and how good of a job does it do at getting those
answers?  Until then, may all your roots be traced, and happy hacking.&lt;/p&gt;&lt;/div&gt; </description> 
	<pubDate>Tue, 14 Nov 2023 22:10:58 +0000</pubDate>

</item> 
<item>
	<title>Andy Wingo: i accidentally a scheme</title>
	<guid>https://wingolog.org/2023/11/13/i-accidentally-a-scheme</guid>
	<link>https://wingolog.org/archives/2023/11/13/i-accidentally-a-scheme</link>
     <description>  &lt;div&gt;&lt;p&gt;Good evening, dear hackfriends.  Tonight&#39;s missive is an apology: not
quite in the sense of expiation, though not quite
&lt;i&gt;not&lt;/i&gt; that, either; rather, apology in the sense of explanation, of
exegesis: apologia.  See, I accidentally made a Scheme.  I know I have
enough Scheme implementations already, but I went and made another one.
It&#39;s for a maybe good reason, though!&lt;/p&gt;&lt;h3&gt;one does not simply a scheme&lt;/h3&gt;&lt;p&gt;I feel like we should make this the decade of leaning into your problems,
and I have a Scheme problem, so here we are.  See, I co-maintain
&lt;a href=&quot;https://gnu.org/s/guile&quot;&gt;Guile&lt;/a&gt;, and have been noodling on a new
garbage collector (GC) for Guile,
&lt;a href=&quot;https://github.com/wingo/whippet&quot;&gt;Whippet&lt;/a&gt;.  Whippet is designed to be
embedded in the project that uses it, so one day I hope it will be just
copied into Guile&#39;s source tree, replacing the venerable
&lt;a href=&quot;https://github.com/ivmai/bdwgc&quot;&gt;BDW-GC&lt;/a&gt; that we currently use.&lt;/p&gt;&lt;p&gt;The thing is, though, that GC implementations are complicated.  A bug in
a GC usually manifests itself far away in time and space from the code
that caused the bug.  Language implementations are also complicated, for
similar reasons.  Swapping one GC for another is something to be done
very carefully.  This is even more the case when the switching cost is
high, which is the case with BDW-GC: as a collector written as a library
to link into &lt;a href=&quot;https://hboehm.info/spe_gc_paper/&quot;&gt;&quot;uncooperative&quot;&lt;/a&gt;
programs, there is more cost to moving to a conventional collector than
in the case where the embedding program is already aware that (for
example) garbage collection may relocate objects.&lt;/p&gt;&lt;p&gt;So, you need to start small.  First, we need to &lt;a href=&quot;https://wingolog.org/archives/2023/02/07/whippet-towards-a-new-local-maximum&quot;&gt;prove that the new GC
implementation is promising in some way&lt;/a&gt;, that it might improve on
BDW-GC.  Then... embed it directly into Guile?  That sounds like a bug
farm.  Is there not any intermediate step that one might take?&lt;/p&gt;&lt;p&gt;But also, how do you actually test that a GC algorithm or
implementation is interesting?  You need a workload, and you need the
ability to compare the new collector to the old, for that workload.  In
Whippet I had been writing some benchmarks in C
(&lt;a href=&quot;https://github.com/wingo/whippet/blob/main/benchmarks/mt-gcbench.c&quot;&gt;example&lt;/a&gt;),
but this approach wasn&#39;t scaling: besides not sparking joy, I was
starting to wonder if what I was testing would actually reflect usage in
Guile.&lt;/p&gt;&lt;p&gt;I had an early approach to rewrite a simple language implementation like
the &lt;a href=&quot;https://wingolog.org/archives/2022/08/18/just-in-time-code-generation-within-webassembly&quot;&gt;other Scheme implementation I made to demonstrate JIT code
generation in
WebAssembly&lt;/a&gt;,
but that soon foundered against what seemed to me an unlikely rock: the
compiler itself.  In my &lt;a href=&quot;https://github.com/wingo/wasm-jit/&quot;&gt;wasm-jit&lt;/a&gt;
work, the &quot;compiler&quot; itself was in C++, using the C++ allocator for
compile-time allocations, and the result was a tree of AST nodes that were
interpreted at run-time.  But to embed the benchmarks in Whippet itself
I needed something C, which is less amenable to abstraction of any
kind...  Here I think I could have made a different choice: to somehow
allow C++ or something as a dependency to write tests, or to do more
mallocation in the &quot;compiler&quot;...&lt;/p&gt;&lt;p&gt;But that wasn&#39;t fun.  A lesson I learned long ago is that if something
isn&#39;t fun, I need to turn it into a compiler.  So I started writing a
compiler to a little bytecode VM, initially in C, then in Scheme because
C is a drag and why not?  Why not just generate the bytecode C file from
Scheme?  Same dependency set, once the C file is generated.  And then,
as long as you&#39;re generating C, why go through bytecode at all?  Why not
just, you know, generate C?&lt;/p&gt;&lt;h3&gt;after all, why not?  why shouldn&#39;t i keep it?&lt;/h3&gt;&lt;p&gt;And that&#39;s how I accidentally made a
Scheme, &lt;a href=&quot;https://github.com/wingo/whiffle&quot;&gt;Whiffle&lt;/a&gt;.  Tomorrow I&#39;ll write a little
more on what Whiffle is and isn&#39;t, and what it&#39;s doing for me.  Until
then, happy hacking!&lt;/p&gt;&lt;/div&gt; </description> 
	<pubDate>Mon, 13 Nov 2023 21:36:08 +0000</pubDate>

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

</item> 
<item>
	<title>poke @ Savannah: Debuggers and Analysis Tools CfP @ FOSDEM 2024</title>
	<guid>https://savannah.gnu.org/news/?id=10541</guid>
	<link>https://savannah.gnu.org/news/?id=10541</link>
     <description>  &lt;p&gt;Guinevere Piazera Larsen sent us the CfP for the upcoming Debuggers and Analysis Tools at FOSDEM 2024!:
&lt;br /&gt;

&lt;br /&gt;
We are excited to announce that the call for proposals is now open for the Debuggers and Analysis Tools developer room at the upcoming FOSDEM 2024, to be hosted on Saturday, February 3rd 2024 in Brussels, Belgium.
&lt;br /&gt;

&lt;br /&gt;
This devroom is a collaborative effort and is organized by dedicated people from projects such as GDB, SystemTap, Valgrind, GNU poke, Elfutils, binutils, Libabigail, and the like.
&lt;br /&gt;

&lt;br /&gt;
Important Dates:
&lt;br /&gt;

&lt;br /&gt;
   1st December 2023    Submission deadline
&lt;br /&gt;
   8th December 2023    Acceptance notifications
&lt;br /&gt;
   15th December 2023   Final Schedule announcement
&lt;br /&gt;
   3rd February 2024    Conference dates
&lt;br /&gt;

&lt;br /&gt;
## CFP Introduction
&lt;br /&gt;

&lt;br /&gt;
This devroom is geared towards authors, users and enthusiasts of Free Software programs involved with debugging and analyzing ELF programs using all the binary information available (including DWARF data).
&lt;br /&gt;

&lt;br /&gt;
The goal of the devroom is for developers to get in touch with each other and with users of their tools, have interesting and hopefully productive discussions, and finally what is most important: to have fun.
&lt;br /&gt;

&lt;br /&gt;
The format of the expected presentations will cover a range that
&lt;br /&gt;
includes:
&lt;br /&gt;

&lt;br /&gt;
    * Talks oriented towards developers of these projects
&lt;br /&gt;
    * Presentation / Introductory Workshops for users of these programs
&lt;br /&gt;
    * Activities oriented towards collaboration &amp;amp; standardization between these programs
&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;
All presentation slots are 25 minutes, with 15 minutes recommended for presentations, and 10 minutes for Q&amp;amp;A. This way we can have 8 slots and bio breaks, covering many topics!
&lt;br /&gt;

&lt;br /&gt;
### What is FOSDEM?
&lt;br /&gt;

&lt;br /&gt;
&lt;b&gt;*FOSDEM is a free event for software developers to meet, share ideas and collaborate.&lt;/b&gt;*
&lt;br /&gt;

&lt;br /&gt;
Every year, thousands of developers of free and open source software from all over the world gather at the event in Brussels.
&lt;br /&gt;

&lt;br /&gt;
FOSDEM 2024 will take place on Saturday 3 and Sunday 4 February 2024.
&lt;br /&gt;

&lt;br /&gt;
It will be an in-person event at the &lt;b&gt;*ULB Solbosch Campus, Brussels, Belgium, Europe.&lt;/b&gt;* If you aren&#39;t there, you can watch the live streams from the main tracks and developer rooms.
&lt;br /&gt;

&lt;br /&gt;
### Important stuff:
&lt;br /&gt;

&lt;br /&gt;
- FOSDEM is free to attend. There is no registration.
&lt;br /&gt;
- [FOSDEM website](&lt;a href=&quot;https://fosdem.org/&quot;&gt;https://fosdem.org/&lt;/a&gt;)
&lt;br /&gt;
- [FOSDEM code of conduct](&lt;a href=&quot;https://fosdem.org/2024/practical/conduct/&quot;&gt;https://fosdem.org/2024/practical/conduct/&lt;/a&gt;)
&lt;br /&gt;
- [FOSDEM Schedule](&lt;a href=&quot;https://fosdem.org/2024/schedule/&quot;&gt;https://fosdem.org/2024/schedule/&lt;/a&gt;)
&lt;br /&gt;

&lt;br /&gt;
### Desirable topics:
&lt;br /&gt;

&lt;br /&gt;
In this devroom, we&#39;re interested in any projects that directly reads binary files and analyses or manipulates them directly. Some projects and tools that fit the devroom are:
&lt;br /&gt;

&lt;br /&gt;
- GDB
&lt;br /&gt;
- LLDB
&lt;br /&gt;
- Ghidra
&lt;br /&gt;
- Valgrind
&lt;br /&gt;
- Dyninst
&lt;br /&gt;
- GNU poke
&lt;br /&gt;
- Binutils
&lt;br /&gt;
- SystemTap
&lt;br /&gt;
- Elfutils
&lt;br /&gt;
- Libabigail
&lt;br /&gt;
- Radare2
&lt;br /&gt;

&lt;br /&gt;
And any other debugging or binary analysis tool or framework
&lt;br /&gt;
projects that might be of interest to Free Software enthusiasts.
&lt;br /&gt;

&lt;br /&gt;
### Topic overlap
&lt;br /&gt;

&lt;br /&gt;
There are over 50 developer rooms this year, and multiple main tracks, so there may be overlap with some other events.
&lt;br /&gt;
If the topic would fit more than one devroom, you are free to choose which to submit to, but we encourage you to consider the focus of the talk, and see which devroom is best matched.
&lt;br /&gt;

&lt;br /&gt;
Full list of devrooms
&lt;br /&gt;
[here](&lt;a href=&quot;https://fosdem.org/2024/news/2023-11-08-devrooms-announced/&quot;&gt;https://fosdem.org/2024/news/2023-11-08-devrooms-announced/&lt;/a&gt;).
&lt;br /&gt;

&lt;br /&gt;
### How to submit your proposal
&lt;br /&gt;

&lt;br /&gt;
To submit a talk, please visit the [FOSDEM 2024 Pretalx
&lt;br /&gt;
website](&lt;a href=&quot;https://pretalx.fosdem.org/fosdem-2024/cfp&quot;&gt;https://pretalx.fosdem.org/fosdem-2024/cfp&lt;/a&gt;).
&lt;br /&gt;

&lt;br /&gt;
Click &lt;b&gt;*Submit a proposal&lt;/b&gt;*. Make sure you choose the &quot;Debuggers and analysis tools&quot; devroom in the track drop-down menu (so that we see it rather than another devroom&#39;s organisers)
&lt;br /&gt;

&lt;br /&gt;
### What should be in your submission
&lt;br /&gt;

&lt;br /&gt;
- name
&lt;br /&gt;
- short bio
&lt;br /&gt;
- contact info
&lt;br /&gt;
- title
&lt;br /&gt;
- abstract (what you&#39;re going talk about, supports markdown)
&lt;br /&gt;

&lt;br /&gt;
Optional:
&lt;br /&gt;

&lt;br /&gt;
- description (more detail description, supports markdown)
&lt;br /&gt;
- submission notes (for the organiser only, not made public)
&lt;br /&gt;
- session image (if you have an illustration to go with the talk)
&lt;br /&gt;
- additional speaker/s (if more than one person presenting)
&lt;br /&gt;

&lt;br /&gt;
Afterwards, click &quot;Continue&quot;.
&lt;br /&gt;
The second page will include fields for:
&lt;br /&gt;

&lt;br /&gt;
- Extra materials for reviewers (optional, for organisers only)
&lt;br /&gt;
- Additional information about the speaker (optional).
&lt;br /&gt;
- Resources to be used during the talk
&lt;br /&gt;

&lt;br /&gt;
All presentations will be recorded and made available under Creative Commons licenses. In the Submission notes field, please indicate that you agree that your presentation will be licensed under the CC-By-SA-4.0 or CC-By-4.0 license and that you agree to have your presentation recorded.
&lt;br /&gt;

&lt;br /&gt;
For example:
&lt;br /&gt;

&lt;br /&gt;
    &quot;If my presentation is accepted for FOSDEM, I hereby agree to
&lt;br /&gt;
license all recordings, slides, and other associated materials under the Creative Commons Attribution Share-Alike 4.0 International License.
&lt;br /&gt;

&lt;br /&gt;
    Sincerely,
&lt;br /&gt;

&lt;br /&gt;
    &amp;lt;NAME&amp;gt;.&quot;
&lt;br /&gt;

&lt;br /&gt;
Once you&#39;ve completed the required sections, submit and we&#39;ll get
&lt;br /&gt;
back to you soon!
&lt;br /&gt;

&lt;br /&gt;
### Things to be aware of
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The reference time will be Brussels local lime (CET)
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;&lt;a href=&quot;https://www.timeanddate.com/worldclock/belgium/brussels&quot;&gt;https://www.timeanddate.com/worldclock/belgium/brussels&lt;/a&gt;&amp;gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;There will be a Q/A session after the talk is over.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  Please make sure that you will be available on the
&lt;br /&gt;
  day of the event.
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you&#39;re not able to attend the talk in-person, live stream links
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  will be available on the FOSDEM schedule page:
&lt;br /&gt;
&amp;lt;&lt;a href=&quot;https://fosdem.org/2024/schedule/&quot;&gt;https://fosdem.org/2024/schedule/&lt;/a&gt;&amp;gt;.
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;FOSDEM Matrix channels are specific to each devroom,
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  the general link is: &amp;lt;/#/#fosdem:fosdem.org&amp;gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;*Matrix bridge to the LibreSOC IRC channel&lt;/b&gt;*:
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;&lt;a href=&quot;https://matrix.to/#/#_oftc_#libre-soc:matrix.org&quot;&gt;https://matrix.to/#/#_oftc_#libre-soc:matrix.org&lt;/a&gt;&amp;gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;FOSDEM 2024 FAQ: &amp;lt;&lt;a href=&quot;https://fosdem.org/2024/faq/&quot;&gt;https://fosdem.org/2024/faq/&lt;/a&gt;&amp;gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
### Contact
&lt;br /&gt;

&lt;br /&gt;
If you have any question about this devroom, please send a message to debuggers-and-analysis-devroom-manager at fosdem dot org.
&lt;br /&gt;

&lt;br /&gt;
Organizers of the devroom can also be reached on IRC at #dadevroom@irc.libera.chat&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Fri, 10 Nov 2023 15:14:34 +0000</pubDate>

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

</item> 
<item>
	<title>FSF Blogs: Software that supports your body should always respect your freedom</title>
	<guid>http://www.fsf.org/blogs/community/software-that-supports-your-body-should-always-respect-your-freedom</guid>
	<link>http://www.fsf.org/blogs/community/software-that-supports-your-body-should-always-respect-your-freedom</link>
     <description>  Software that controls your body should always respect your freedom.
This article is a recap of scandals of medical devices, like hearing
aids, insulin pumps, bionic eyes, and pacemakers, and what we can
learn from them. It&#39;s astonishing: you wouldn&#39;t expect these devices
to be run by software in such a way that they can leave you completely
helpless. </description> 
	<pubDate>Fri, 03 Nov 2023 21:46:22 +0000</pubDate>

</item> 
<item>
	<title>pspp @ Savannah: PSPP 2.0.0-pre3 has been released</title>
	<guid>https://savannah.gnu.org/news/?id=10536</guid>
	<link>https://savannah.gnu.org/news/?id=10536</link>
     <description>  &lt;p&gt;I&#39;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.0.0-pre2 to 2.0.0-pre3:
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Testsuite fix.
&lt;/li&gt;
&lt;li&gt;User string fix.
&lt;/li&gt;
&lt;li&gt;Arabic translation update.
&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>Thu, 02 Nov 2023 21:36:43 +0000</pubDate>

</item> 
<item>
	<title>pspp @ Savannah: PSPP 2.0.0-pre2 has been released</title>
	<guid>https://savannah.gnu.org/news/?id=10535</guid>
	<link>https://savannah.gnu.org/news/?id=10535</link>
     <description>  &lt;p&gt;I&#39;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 1.6.2 to 2.0.0-pre2:
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The CTABLES command is now implemented.
&lt;/li&gt;
&lt;li&gt;FREQUENCIES now honors the LAYERED setting on SPLIT FILE.
&lt;/li&gt;
&lt;li&gt;AGGREGATE:
&lt;ul&gt;
&lt;li&gt;New aggregation functions CGT, CLT, CIN, and COUT.
&lt;/li&gt;
&lt;li&gt;Break variables are now optional.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ADD FILES, MATCH FILES, and UPDATE now allow string variables with the same name to have different widths.
&lt;/li&gt;
&lt;li&gt;CROSSTABS now calculates significance of Pearson and Spearman correlations in symmetric measures.
&lt;/li&gt;
&lt;li&gt;DISPLAY MACROS is now implemented.
&lt;/li&gt;
&lt;li&gt;SET SUMMARY is now implemented.
&lt;/li&gt;
&lt;li&gt;SHOW ENVIRONMENT is now implemented.
&lt;/li&gt;
&lt;li&gt;Removed the MODIFY VARS command, which is not in SPSS.
&lt;/li&gt;
&lt;li&gt;Building from a Git repository, which previously required GIMP, now requires rsvg-convert from librsvg2 instead.
&lt;/li&gt;
&lt;li&gt;The pspp-dump-sav program is no longer installed by default.
&lt;/li&gt;
&lt;li&gt;Improved the search options in the syntax editor.
&lt;/li&gt;
&lt;li&gt;Localisations for the ar (Arabic) and ta (Tamil) locales have been added.
&lt;/li&gt;
&lt;li&gt;Journaling is now enabled by default when PSPP or PSPPIRE is started interactively.  In PSPPIRE, use Edit|Options to override the default.
&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>Wed, 01 Nov 2023 03:34:40 +0000</pubDate>

</item> 
<item>
	<title>FSF Events: Free Software Directory meeting on IRC: Friday, November 03, starting at 12:00 EDT (16:00 UTC)</title>
	<guid>http://www.fsf.org/events/fsd-20231103-irc</guid>
	<link>http://www.fsf.org/events/fsd-20231103-irc</link>
     <description>  Join the FSF and friends on Friday, November 03, from
12:00 to 15:00 EDT (16:00 to 19:00 UTC) to help improve the Free
Software Directory. </description> 
	<pubDate>Tue, 31 Oct 2023 18:52:26 +0000</pubDate>

</item> 
<item>
	<title>gprofng-gui @ Savannah: gprofng GUI 1.0 released</title>
	<guid>https://savannah.gnu.org/news/?id=10533</guid>
	<link>https://savannah.gnu.org/news/?id=10533</link>
     <description>  &lt;p&gt;We are are happy to announce the first release of GNU gprofng-gui, version 1.0.
&lt;br /&gt;

&lt;br /&gt;
gprofng-gui is a full-fledged graphical interface for the gprofng
&lt;br /&gt;
profiler, which is part of the GNU binutils.
&lt;br /&gt;

&lt;br /&gt;
The tarball gprofng-gui-1.0.tar.gz is now available at
&lt;br /&gt;
&lt;a href=&quot;https://ftp.gnu.org/gnu/gprofng-gui/gprofng-gui-1.0.tar.gz&quot;&gt;https://ftp.gnu.org/gnu/gprofng-gui/gprofng-gui-1.0.tar.gz&lt;/a&gt;.
&lt;br /&gt;

&lt;br /&gt;
--
&lt;br /&gt;
Vladimir Mezentsev
&lt;br /&gt;
Jose E. Marchesi
&lt;br /&gt;
31 October 2023&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Tue, 31 Oct 2023 09:18:15 +0000</pubDate>

</item> 
<item>
	<title>GNU Guix: A build daemon in Guile</title>
	<guid>https://guix.gnu.org/blog/2023/a-build-daemon-in-guile//</guid>
	<link>https://guix.gnu.org/blog/2023/a-build-daemon-in-guile//</link>
     <description>  &lt;p&gt;When using Guix, you might be aware of the
&lt;a href=&quot;https://guix.gnu.org/en/manual/en/html_node/Setting-Up-the-Daemon.html&quot;&gt;daemon&lt;/a&gt;.
It runs in the background but it&#39;s a key component in Guix.  Whenever
you&#39;ve been using Guix to &lt;a href=&quot;https://guix.gnu.org/en/blog/2023/dissecting-guix-part-1-derivations/&quot;&gt;operate on the store&lt;/a&gt;,
whether that&#39;s building something or downloading some substitutes,
it&#39;s the daemon managing that operation.&lt;/p&gt;&lt;p&gt;The daemon also is a key part of the history of Guix.  The Guix
project started mixing Guile with ideas from the Nix project, and the
&lt;code&gt;guix-daemon&lt;/code&gt; is a fork of the &lt;code&gt;nix-daemon&lt;/code&gt; with some tweaks made over
the years.  Rather than being implemented in Guile though, the daemon
is implemented in C++ with some helpers written in Guile.  Given the
focus on Guile in Guix, this is unusual, and I believe it&#39;s made
working on the daemon less desirable, especially since rewriting it in
Guile has been discussed for many years now.  It has been the topic of
a Google Summer of Code internship by Caleb Ristvedt back in 2017,
which helped clarify implementation details and led to some
&lt;a href=&quot;https://git.savannah.gnu.org/cgit/guix.git/log/?h=guile-daemon&quot;&gt;preliminary code&lt;/a&gt;.&lt;/p&gt;&lt;h1&gt;What would a build daemon in Guile bring?&lt;/h1&gt;&lt;p&gt;Guix already has code written in Guile for doing some of what the
daemon does internally, so being able to use this Guile code inside
and outside the daemon would simplify Guix and allow removing the C++
code.&lt;/p&gt;&lt;p&gt;There isn&#39;t Guile code yet for everything the daemon does though, so
getting to this point will make new exciting features easier to
implement.  That could be things like making it easier to use Guix in
environments where running the daemon in the usual way is inconvenient
or infeasible.  It may also help with portability, so help with
running Guix on the Hurd and new architectures.&lt;/p&gt;&lt;p&gt;As someone who&#39;s more experienced writing Guile than C++, I&#39;m also
hoping it&#39;ll generally make hacking on the daemon more accessible.
This in turn might lead to new features.  For example, I think having
a build daemon written in Guile will simplify implementing a way to
jump in to a build and inspect the environment.&lt;/p&gt;&lt;p&gt;With that in mind, I&#39;m excited to announce that &lt;a href=&quot;https://nlnet.nl/project/GuixDaemon-Guile/&quot;&gt;support from
NLNet&lt;/a&gt;, will allow me to
focus for the next year on getting a Guile implementation of the build
daemon written and adopted.&lt;/p&gt;&lt;h1&gt;A technical plan&lt;/h1&gt;&lt;p&gt;Building on the &lt;a href=&quot;https://lists.gnu.org/archive/html/guix-devel/2023-09/msg00328.html&quot;&gt;recent discussion&lt;/a&gt;
of this topic on the &lt;code&gt;guix-devel@gnu.org&lt;/code&gt; mailing list, here&#39;s some
technical thoughts on how I&#39;m approaching this.&lt;/p&gt;&lt;p&gt;While I think there&#39;s a substantial amount of work to do, progress
towards a Guile guix-daemon has already been made.  Given that things
in Guix have probably changed since this work has happened, I plan to
carefully review that existing work (most of which can be found on the
&lt;a href=&quot;https://git.savannah.gnu.org/cgit/guix.git/log/?h=guile-daemon&quot;&gt;&lt;code&gt;guile-daemon&lt;/code&gt; branch&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The priority for the Guile daemon is backwards compatibility, so the
plan is to allow switching between the C++ implementation and Guile
implementation without any issues.  This&#39;ll require not making changes
to the database schema, and generally doing things in a way which the
current C++ daemon will understand.&lt;/p&gt;&lt;p&gt;Like the &lt;a href=&quot;https://guix.gnu.org/en/blog/2021/building-derivations-how-complicated-can-it-be/&quot;&gt;Guix Build Coordinator&lt;/a&gt;,
I&#39;m planning to make the daemon a single process using
&lt;a href=&quot;https://github.com/wingo/fibers&quot;&gt;Fibers&lt;/a&gt; for concurrency.  This is in
contrast to the forking model using by the C++ daemon.  Even though
it&#39;s not a priority to address feature issues with the current daemon,
this approach might help to reduce database contention issues
experienced with the current daemon, and allow for less locking, like
not having the big GC lock for example.&lt;/p&gt;&lt;p&gt;I&#39;m planning on publishing more blog posts as the project progress, so
keep an eye on the Guix blog for future updates.&lt;/p&gt;&lt;h1&gt;Acknowledgments&lt;/h1&gt;&lt;p&gt;Thanks to Simon Tournier and Ludovic Courtès for providing feedback on
an earlier draft of this post.&lt;/p&gt;&lt;h4&gt;About GNU Guix&lt;/h4&gt;&lt;p&gt;&lt;a href=&quot;https://guix.gnu.org&quot;&gt;GNU Guix&lt;/a&gt; is a transactional package manager
and an advanced distribution of the GNU system that &lt;a href=&quot;https://www.gnu.org/distros/free-system-distribution-guidelines.html&quot;&gt;respects user
freedom&lt;/a&gt;.
Guix can be used on top of any system running the Hurd or the Linux
kernel, or it can be used as a standalone operating system
distribution for i686, x86_64, ARMv7, AArch64 and POWER9 machines.&lt;/p&gt;&lt;p&gt;In addition to standard package management features, Guix supports
transactional upgrades and roll-backs, unprivileged package
management, per-user profiles, and garbage collection.  When used as a
standalone GNU/Linux distribution, Guix offers a declarative,
stateless approach to operating system configuration management.  Guix
is highly customizable and hackable through
&lt;a href=&quot;https://www.gnu.org/software/guile&quot;&gt;Guile&lt;/a&gt; programming interfaces and
extensions to the &lt;a href=&quot;http://schemers.org&quot;&gt;Scheme&lt;/a&gt; language.&lt;/p&gt; </description> 
	<pubDate>Mon, 30 Oct 2023 09:30:00 +0000</pubDate>

</item> 
<item>
	<title>unifont @ Savannah: Unifont 15.1.04 Released</title>
	<guid>https://savannah.gnu.org/news/?id=10532</guid>
	<link>https://savannah.gnu.org/news/?id=10532</link>
     <description>  &lt;p&gt;&lt;b&gt;29 October 2023&lt;/b&gt; Unifont 15.1.04 is now available.  This release adds the CJK Unified Ideographs Extension I glyphs (U+2EBF0..U+2EE5D).  It also includes other minor glyph and software updates.
&lt;br /&gt;

&lt;br /&gt;
This release no longer builds TrueType fonts by default, as announced over the past year.  They have been replaced with their OpenType equivalents.  TrueType fonts can still be built manually by typing &quot;make truetype&quot; in the font directory.
&lt;br /&gt;

&lt;br /&gt;
This release also includes a new Hangul Syllables Johab 6/3/1 encoding proposed by Ho-Seok Ee.  New Hangul supporting software for this encoding allows formation of all double-width Hangul syllables, including those with ancient letters that are outside the Unicode Hangul Syllables range.  Details are in the ChangeLog file.
&lt;br /&gt;

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

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

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

&lt;br /&gt;
     &lt;a href=&quot;https://ftp.gnu.org/gnu/unifont/unifont-15.1.04/&quot;&gt;https://ftp.gnu.org/gnu/unifont/unifont-15.1.04/&lt;/a&gt;
&lt;br /&gt;

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

&lt;br /&gt;
     &lt;a href=&quot;ftp://ftp.gnu.org/gnu/unifont/unifont-15.1.04/&quot;&gt;ftp://ftp.gnu.org/gnu/unifont/unifont-15.1.04/&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=&quot;https://unifoundry.com/pub/unifont/unifont-15.1.04/&quot;&gt;https://unifoundry.com/pub/unifont/unifont-15.1.04/&lt;/a&gt;
&lt;br /&gt;

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

&lt;br /&gt;
     &lt;a href=&quot;https://unifoundry.com/pub/unifont/unifont-15.1.04/font-builds/&quot;&gt;https://unifoundry.com/pub/unifont/unifont-15.1.04/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=&quot;https://unifoundry.com/unifont/index.html&quot;&gt;https://unifoundry.com/unifont/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=&quot;https://unifoundry.com/unifont/unifont-utilities.html&quot;&gt;https://unifoundry.com/unifont/unifont-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=&quot;https://unifoundry.com/hangul/index.html&quot;&gt;https://unifoundry.com/hangul/index.html&lt;/a&gt;
&lt;br /&gt;

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

&lt;br /&gt;
      &lt;a href=&quot;http://unifoundry.com/hangul/hangul-generation.html&quot;&gt;http://unifoundry.com/hangul/hangul-generation.html&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Sun, 29 Oct 2023 22:11:17 +0000</pubDate>

</item> 
<item>
	<title>poke @ Savannah: [VIDEO] Writing GNU poke pickles: GCOV data files</title>
	<guid>https://savannah.gnu.org/news/?id=10529</guid>
	<link>https://savannah.gnu.org/news/?id=10529</link>
     <description>  &lt;p&gt;We have published a video that shows a small but interesting real-life example of a poke pickle to poke at GCOV data files.  The purpose of the video is to help learning useful idioms to write your own pickles.  Hope you find it useful!
&lt;br /&gt;

&lt;br /&gt;
&lt;a href=&quot;https://youtu.be/95f5bB4ls7w&quot;&gt;https://youtu.be/95f5bB4ls7w&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Wed, 25 Oct 2023 11:56:18 +0000</pubDate>

</item> 
<item>
	<title>parallel @ Savannah: GNU Parallel 20231022 (&#39;Al-Aqsa Deluge&#39;) released [stable]</title>
	<guid>https://savannah.gnu.org/news/?id=10528</guid>
	<link>https://savannah.gnu.org/news/?id=10528</link>
     <description>  &lt;p&gt;GNU Parallel 20231022 (&#39;Al-Aqsa Deluge&#39;) 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;
  Love to make a dual processor workstation absolutely whir running dozens of analysis scripts at once
&lt;br /&gt;
    -- Best Catboy Key Grip @alamogordoglass@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;
News about GNU Parallel:
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Resume long parallel jobs &lt;a href=&quot;https://ginolhac.github.io/posts/2023-10-02_resume-parallel/index.html&quot;&gt;https://ginolhac.github.io/posts/2023-10-02_resume-parallel/index.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Efficiency and Speed with GNU Parallel &lt;a href=&quot;https://dev.to/0xog_pg/efficiency-and-speed-with-gnu-parallel-loo&quot;&gt;https://dev.to/0xog_pg/efficiency-and-speed-with-gnu-parallel-loo&lt;/a&gt; 
&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 &#39;*.jpg&#39; |
&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=&quot;http://www.gnu.org/s/parallel/&quot;&gt;http://www.gnu.org/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=&quot;http://pi.dk/3&quot;&gt;http://pi.dk/3&lt;/a&gt; ) &amp;gt; install.sh
&lt;br /&gt;
    $ sha1sum install.sh | grep 883c667e01eed62f975ad28b6d50e22a
&lt;br /&gt;
    12345678 883c667e 01eed62f 975ad28b 6d50e22a
&lt;br /&gt;
    $ md5sum install.sh | grep cc21b4c943fd03e93ae1ae49e28573c0
&lt;br /&gt;
    cc21b4c9 43fd03e9 3ae1ae49 e28573c0
&lt;br /&gt;
    $ sha512sum install.sh | grep ec113b49a54e705f86d51e784ebced224fdff3f52
&lt;br /&gt;
    79945d9d 250b42a4 2067bb00 99da012e c113b49a 54e705f8 6d51e784 ebced224
&lt;br /&gt;
    fdff3f52 ca588d64 e75f6033 61bd543f d631f592 2f87ceb2 ab034149 6df84a35
&lt;br /&gt;
    $ bash install.sh
&lt;br /&gt;

&lt;br /&gt;
Watch the intro video on &lt;a href=&quot;http://www.youtube.com/playlist?list=PL284C9FF2488BC6D1&quot;&gt;http://www.youtube.com/playlist?list=PL284C9FF2488BC6D1&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=&quot;https://doi.org/10.5281/zenodo.1146014&quot;&gt;https://doi.org/10.5281/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=&quot;https://gnuparallel.threadless.com/designs/gnu-parallel&quot;&gt;https://gnuparallel.threadless.com/designs/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=&quot;https://my.fsf.org/donate/&quot;&gt;https://my.fsf.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&#39; 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&#39;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, 24 Oct 2023 21:15:42 +0000</pubDate>

</item> 
<item>
	<title>FSF Events: LibrePlanet 2024 Call for Sessions office hours on November 2</title>
	<guid>http://www.fsf.org/events/libreplanet-2024-cfs-office-hour-2023-11-02</guid>
	<link>http://www.fsf.org/events/libreplanet-2024-cfs-office-hour-2023-11-02</link>
     <description>  Need help getting your session proposal for LibrePlanet 2024: Cultivating Community in good shape? We&#39;re awaiting your questions in the office hour in #LibrePlanet on Libera.chat on Thursday, November 2 at 13:00 EDT. </description> 
	<pubDate>Mon, 23 Oct 2023 18:20:00 +0000</pubDate>

</item> 
<item>
	<title>unifont @ Savannah: Unifont 15.1.03 Released</title>
	<guid>https://savannah.gnu.org/news/?id=10527</guid>
	<link>https://savannah.gnu.org/news/?id=10527</link>
     <description>  &lt;p&gt;*21 October 2023*Unifont 15.1.03 is now available.  This release adds the CJK Unified Ideographs Extension I glyphs (U+2EBF0..U+2EE5D).  It also includes other minor glyph and software updates.
&lt;br /&gt;

&lt;br /&gt;
This release no longer builds TrueType fonts by default, as announced over the past year.  They have been replaced with their OpenType equivalents.  TrueType fonts can still be built manually by typing &quot;make truetype&quot; in the font directory.
&lt;br /&gt;

&lt;br /&gt;
This release also includes a new Hangul Syllables Johab 6/3/1 encoding proposed by Ho-Seok Ee.  New Hangul supporting software for this encoding allows formation of all double-width Hangul syllables, including those with ancient letters that are outside the Unicode Hangul Syllables range.  Details are in the ChangeLog file.
&lt;br /&gt;

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

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

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

&lt;br /&gt;
     &lt;a href=&quot;https://ftp.gnu.org/gnu/unifont/unifont-15.1.03/&quot;&gt;https://ftp.gnu.org/gnu/unifont/unifont-15.1.03/&lt;/a&gt;
&lt;br /&gt;

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

&lt;br /&gt;
     &lt;a href=&quot;ftp://ftp.gnu.org/gnu/unifont/unifont-15.1.03/&quot;&gt;ftp://ftp.gnu.org/gnu/unifont/unifont-15.1.03/&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=&quot;https://unifoundry.com/pub/unifont/unifont-15.1.03/&quot;&gt;https://unifoundry.com/pub/unifont/unifont-15.1.03/&lt;/a&gt;
&lt;br /&gt;

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

&lt;br /&gt;
     &lt;a href=&quot;https://unifoundry.com/pub/unifont/unifont-15.1.03/font-builds/&quot;&gt;https://unifoundry.com/pub/unifont/unifont-15.1.03/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=&quot;https://unifoundry.com/unifont/index.html&quot;&gt;https://unifoundry.com/unifont/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=&quot;https://unifoundry.com/unifont/unifont-utilities.html&quot;&gt;https://unifoundry.com/unifont/unifont-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=&quot;https://unifoundry.com/hangul/index.html&quot;&gt;https://unifoundry.com/hangul/index.html&lt;/a&gt;
&lt;br /&gt;

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

&lt;br /&gt;
      &lt;a href=&quot;http://unifoundry.com/hangul/hangul-generation.html&quot;&gt;http://unifoundry.com/hangul/hangul-generation.html&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Sun, 22 Oct 2023 00:40:16 +0000</pubDate>

</item> 
<item>
	<title>gnuastro @ Savannah: Gnuastro 0.21 released</title>
	<guid>https://savannah.gnu.org/news/?id=10526</guid>
	<link>https://savannah.gnu.org/news/?id=10526</link>
     <description>  &lt;p&gt;The 21st release of GNU Astronomy Utilities (Gnuastro) is now available. See the full announcement for all the new features in this release and the many bugs that have been found and fixed: &lt;a href=&quot;https://lists.gnu.org/archive/html/info-gnuastro/2023-10/msg00000.html&quot;&gt;https://lists.gnu.org/archive/html/info-gnuastro/2023-10/msg00000.html&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Fri, 20 Oct 2023 20:23:13 +0000</pubDate>

</item> 
<item>
	<title>Andy Wingo: requiem for a stringref</title>
	<guid>https://wingolog.org/2023/10/19/requiem-for-a-stringref</guid>
	<link>https://wingolog.org/archives/2023/10/19/requiem-for-a-stringref</link>
     <description>  &lt;div&gt;&lt;p&gt;Good day, comrades.  Today&#39;s missive is about strings!&lt;/p&gt;&lt;h3&gt;a problem for java&lt;/h3&gt;&lt;p&gt;Imagine you want to compile a program to WebAssembly, with the new &lt;a href=&quot;https://github.com/WebAssembly/gc/blob/master/proposals/gc/MVP.md&quot;&gt;GC
support for
WebAssembly&lt;/a&gt;.
Your WebAssembly program will run on web browsers and render its
contents using the DOM API:
&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Document/createElement&quot;&gt;&lt;tt&gt;Document.createElement&lt;/tt&gt;&lt;/a&gt;,
&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Document/createTextNode&quot;&gt;&lt;tt&gt;Document.createTextNode&lt;/tt&gt;&lt;/a&gt;,
and so on.  It will also use DOM interfaces to read parts of the page
and read input from the user.&lt;/p&gt;&lt;p&gt;How do you go about representing your program in WebAssembly?  The GC
support gives you the ability to define a number of different kinds of
&lt;a href=&quot;https://webassembly.github.io/gc/core/syntax/types.html#aggregate-types&quot;&gt;aggregate data
types&lt;/a&gt;:
structs (records), arrays, and functions-as-values.  Earlier versions of
WebAssembly gave you 32- and 64-bit integers, floating-point numbers,
and opaque references to host values (&lt;tt&gt;externref&lt;/tt&gt;).  This is what you
have in your toolbox.  But what about strings?&lt;/p&gt;&lt;p&gt;WebAssembly&#39;s historical answer has been to throw its hands in the air
and punt the problem to its user.  This isn&#39;t so bad: the direct user of
WebAssembly is a compiler developer and can fend for themself.  Using
the primitives above, it&#39;s clear we should represent strings as some
kind of array.&lt;/p&gt;&lt;p&gt;The source language may impose specific requirements regarding string
representations:  for example, in Java, you will want to use an &lt;tt&gt;(array i16)&lt;/tt&gt;, because Java&#39;s strings are specified as sequences of UTF-16¹ code
units, and Java programs are written assuming that random access to a
code unit is constant-time.&lt;/p&gt;&lt;p&gt;Let&#39;s roll with the Java example for a while.  It so happens that
JavaScript, the main language of the web, also specifies strings in
terms of 16-bit code units.  The DOM interfaces are optimized for
JavaScript strings, so at some point, our WebAssembly program is going
to need to convert its &lt;tt&gt;(array i16)&lt;/tt&gt; buffer to a JavaScript string.  You
can imagine that a high-throughput interface between WebAssembly and the
DOM is going to involve a significant amount of copying; could there be
a way to avoid this?&lt;/p&gt;&lt;p&gt;Similarly, Java is going to need to perform a number of gnarly
operations on its strings, for example, locale-specific collation.  This
is a hard problem whose solution basically amounts to shipping a copy of
&lt;a href=&quot;https://unicode-org.github.io/icu/userguide/icu/&quot;&gt;&lt;tt&gt;libICU&lt;/tt&gt;&lt;/a&gt; in their
WebAssembly module; that&#39;s a lot of binary size, and it&#39;s not even clear
how to compile &lt;tt&gt;libICU&lt;/tt&gt; in such a way that works on GC-managed arrays
rather than linear memory.&lt;/p&gt;&lt;p&gt;Thinking about it more, there&#39;s also the problem of regular expressions.
A high-performance regular expression engine is a lot of investment, and
not really portable from the native world to WebAssembly, as the main
techniques require just-in-time code generation, which is unavailable on
Wasm.&lt;/p&gt;&lt;p&gt;This is starting to sound like a terrible system: big binaries, lots of
copying, suboptimal algorithms, and a likely ongoing functionality gap.
What to do?&lt;/p&gt;&lt;h3&gt;a solution for java&lt;/h3&gt;&lt;p&gt;One observation is that in the specific case of Java, we could just use
JavaScript strings in a web browser, instead of implementing our own
string library.  We may need to make some shims here and there, but the
basic functionality from JavaScript gets us what we need: constant-time
UTF-16¹ code unit access from within WebAssembly, and efficient access
to browser regular expression, internationalization, and DOM
capabilities that doesn&#39;t require copying.&lt;/p&gt;&lt;p&gt;A sort of minimum viable product for improving the performance of Java
compiled to Wasm/GC would be to represent strings as
&lt;a href=&quot;https://webassembly.github.io/gc/core/syntax/types.html#syntax-heaptype&quot;&gt;&lt;tt&gt;externref&lt;/tt&gt;&lt;/a&gt;,
which is WebAssembly&#39;s way of making an opaque reference to a host
value.  You would operate on those values by importing the equivalent of
&lt;tt&gt;String.prototype.charCodeAt&lt;/tt&gt; and friends; to get the receivers right
you&#39;d need to run them through
&lt;a href=&quot;https://github.com/WebAssembly/stringref/issues/5#issuecomment-1243487288&quot;&gt;&lt;tt&gt;Function.call.bind&lt;/tt&gt;&lt;/a&gt;.
It&#39;s a somewhat convoluted system, but a WebAssembly engine could be
taught to recognize such a function and compile it specially, using the
same code that JavaScript compiles to.&lt;/p&gt;&lt;p&gt;(Does this sound too complicated or too distasteful to implement?
Disabuse yourself of the notion:  it&#39;s happening already.  V8 does this
and other JS/Wasm engines will be forced to follow, as users file bug
reports that such-and-such an app is slow on e.g. Firefox but fast on
Chrome, and so on and so on.  It&#39;s the same dynamic that led &lt;tt&gt;asm.js&lt;/tt&gt;
adoption.)&lt;/p&gt;&lt;p&gt;Getting properly good performance will require a bit more, though.
String literals, for example, would have to be loaded from e.g. UTF-8 in
a WebAssembly data section, then transcoded to a JavaScript string.  You
need a function that can convert UTF-8 to JS string in the first place;
let&#39;s call it &lt;tt&gt;fromUtf8Array&lt;/tt&gt;.  An engine can now optimize the
&lt;tt&gt;array.new_data&lt;/tt&gt; + &lt;tt&gt;fromUtf8Array&lt;/tt&gt; sequence to avoid the intermediate
array creation.  It would also be nice to tighten up the typing on the
WebAssembly side: having everything be &lt;tt&gt;externref&lt;/tt&gt; imposes a dynamic
type-check on each operation, which is something that can&#39;t always be
elided.&lt;/p&gt;&lt;h3&gt;beyond the web?&lt;/h3&gt;&lt;p&gt;&quot;JavaScript strings for Java&quot; has two main limitations: JavaScript and
Java.  On the first side, this MVP doesn&#39;t give you anything if your
WebAssembly host doesn&#39;t do JavaScript.  Although it&#39;s a bit of a
failure for a universal virtual machine, to an extent, the WebAssembly
ecosystem is OK with this distinction: there are different compiler and
toolchain options when targetting the web versus, say, Fastly&#39;s edge
compute platform.&lt;/p&gt;&lt;p&gt;But does that mean you can&#39;t run Java on Fastly&#39;s cloud?  Does the Java
compiler have to actually implement all of those things that we were
trying to avoid?  Will Java actually implement those things?  I think
the answers to all of those questions is &quot;no&quot;, but also that I expect a
pretty crappy outcome.&lt;/p&gt;&lt;p&gt;First of all, it&#39;s not technically required that Java implement its own
strings in terms of &lt;tt&gt;(array i16)&lt;/tt&gt;.  A Java-to-Wasm/GC compiler can keep
the strings-as-opaque-host-values paradigm, and instead have these
string routines provided by an auxiliary WebAssembly module that itself
probably uses &lt;tt&gt;(array i16)&lt;/tt&gt;, effectively polyfilling what the browser
would give you.  The effort of creating this module can be shared
between e.g. Java and C#, and the run-time costs for instantiating the
module can be amortized over a number of Java users within a process.&lt;/p&gt;&lt;p&gt;However, I don&#39;t expect such a module to be of good quality.  It doesn&#39;t
seem possible to implement a good regular expression engine that way,
for example.  And, absent a very good run-time system with an adaptive
compiler, I don&#39;t expect the low-level per-codepoint operations to be as
efficient with a polyfill as they are on the browser.&lt;/p&gt;&lt;p&gt;Instead, I could see non-web WebAssembly hosts being pressured into
implementing their own built-in UTF-16¹ module which has accelerated
compilation, a native regular expression engine, and so on.  It&#39;s nice
to have a portable fallback but in the long run, first-class UTF-16¹
will be everywhere.&lt;/p&gt;&lt;h3&gt;beyond java?&lt;/h3&gt;&lt;p&gt;The other drawback is Java, by which I mean, Java (and JavaScript) is
outdated: if you were designing them today, their strings would not be
UTF-16¹.&lt;/p&gt;&lt;p&gt;I keep this little &quot;¹&quot; sigil when I mention UTF-16 because Java (and
JavaScript) don&#39;t actually use UTF-16 to represent their strings.
UTF-16 is standard &lt;i&gt;Unicode encoding form&lt;/i&gt;.  A Unicode encoding form
encodes a sequence of &lt;i&gt;Unicode scalar values&lt;/i&gt; (USVs), using one or two
16-bit &lt;i&gt;code units&lt;/i&gt; to encode each USV.  A USV is a &lt;i&gt;codepoint&lt;/i&gt;: an
integer in the range [0,0x10FFFF], but excluding &lt;i&gt;surrogate
codepoints&lt;/i&gt;: codepoints in the range [0xD800,0xDFFF].&lt;/p&gt;&lt;p&gt;Surrogate codepoints are an accident of history, and occur either when
accidentally slicing a two-code-unit UTF-16-encoded-USV in the middle,
or when treating an arbitrary &lt;tt&gt;i16&lt;/tt&gt; array as if it were valid UTF-16.
They are annoying to detect, but in practice are here to stay: no amount
of wishing will make them go away from Java, JavaScript, C#, or other
similar languages from those heady days of the mid-90s.  Believe me, I have
engaged in some serious wishing, but if you, the virtual machine
implementor, want to support Java as a source language, your strings
have to be accessible as 16-bit code units, which opens the door
(eventually) to surrogate codepoints.&lt;/p&gt;&lt;p&gt;So when I say UTF-16¹, I really mean
&lt;a href=&quot;https://simonsapin.github.io/wtf-8/&quot;&gt;WTF-16&lt;/a&gt;: sequences of any 16-bit
code units, without the UTF-16 requirement that surrogate code units be
properly paired.  In this way, WTF-16 encodes a larger language than
UTF-16: not just USV codepoints, but also surrogate codepoints.&lt;/p&gt;&lt;p&gt;The existence of WTF-16 is a consequence of a kind of original sin,
originating in the choice to expose 16-bit code unit access to the Java
programmer, and which everyone agrees should be somehow firewalled off
from the rest of the world.  The usual way to do this is to prohibit
WTF-16 from being transferred over the network or stored to disk: a
message sent via an HTTP &lt;tt&gt;POST&lt;/tt&gt;, for example, will never include a
surrogate codepoint, and will either replace it with the U+FFFD
replacement codepoint or throw an error.&lt;/p&gt;&lt;p&gt;But within a Java program, and indeed within a JavaScript program, there
is no attempt to maintain the UTF-16 requirements regarding surrogates,
because any change from the current behavior would break programs.  (How
many?  Probably very, very few.  But productively deprecating web
behavior is hard to do.)&lt;/p&gt;&lt;p&gt;If it were just Java and JavaScript, that would be one thing, but WTF-16
poses challenges for using JS strings from non-Java languages.  Consider
that any JavaScript string can be invalid UTF-16: if your language
defines strings as sequences of USVs, which excludes surrogates, what do
you do when you get a fresh string from JS?  Passing your string &lt;i&gt;to&lt;/i&gt; JS
is fine, because WTF-16 encodes a superset of USVs, but when you receive
a string, you need to have a plan.&lt;/p&gt;&lt;p&gt;You only have a few options.  You can eagerly check that a string is
valid UTF-16; this might be a potentially expensive O(n) check, but
perhaps this is acceptable.  (This check may be &lt;a href=&quot;https://github.com/tc39/proposal-is-usv-string&quot;&gt;faster in the
future&lt;/a&gt;.)  Or, you can
replace surrogate codepoints with U+FFFD, when accessing string
contents; lossy, but preserves your language&#39;s semantic domain.  Or, you
can extend your language&#39;s semantics to somehow deal with surrogate
codepoints.&lt;/p&gt;&lt;p&gt;My point is that if you want to use JS strings in a non-Java-like
language, your language will need to define what to do with invalid
UTF-16.  Ideally the browser will give you a way to put your policy into
practice: replace with U+FFFD, error, or pass through.&lt;/p&gt;&lt;h3&gt;beyond java? (reprise) (feat: snakes)&lt;/h3&gt;&lt;p&gt;With that detail out of the way, say you are compiling Python to
Wasm/GC.  &lt;a href=&quot;https://docs.python.org/3/reference/datamodel.html#immutable-sequences&quot;&gt;Python&#39;s language
reference&lt;/a&gt;
says: &quot;A string is a sequence of values that represent Unicode code
points. All the code points in the range U+0000 - U+10FFFF can be
represented in a string.&quot;  This corresponds to the domain of
JavaScript&#39;s strings; great!&lt;/p&gt;&lt;p&gt;On second thought, how do you actually access the contents of the
string?  Surely not via the equivalent of JavaScript&#39;s
&lt;tt&gt;String.prototype.charCodeAt&lt;/tt&gt;; Python strings are sequences of codepoints, not
16-bit code units.&lt;/p&gt;&lt;p&gt;Here we arrive to the second, thornier problem, which is less about
domain and more about idiom: in Python, we expect to be able to access
strings by codepoint index.  This is the case not only to access string
contents, but also to refer to positions in strings, for example when
extracting a substring.  These operations need to be fast (or fast
enough anyway; CPython doesn&#39;t have a very high performance baseline to
meet).&lt;/p&gt;&lt;p&gt;However, the web platform doesn&#39;t give us O(1) access to string
codepoints.  Usually a codepoint just takes up one 16-bit code unit, so
the (zero-indexed) 5th codepoint of JS string &lt;tt&gt;s&lt;/tt&gt; may indeed be at
&lt;tt&gt;s.codePointAt(5)&lt;/tt&gt;, but it may also be at offset 6, 7, 8, 9, or 10.  You
get the point: finding the &lt;i&gt;n&lt;/i&gt;th codepoint in a JS string requires a
linear scan from the beginning.&lt;/p&gt;&lt;p&gt;More generally, &lt;i&gt;all&lt;/i&gt; languages will want to expose O(1) access to
&lt;i&gt;some&lt;/i&gt; primitive subdivision of strings.  For Rust, this is bytes; 8-bit
bytes are the &lt;i&gt;code units&lt;/i&gt; of UTF-8.  For others like Java or C#, it&#39;s
16-bit code units.  For Python, it&#39;s codepoints.  When targetting
JavaScript strings, there may be a performance impedance mismatch
between what the platform offers and what the language requires.&lt;/p&gt;&lt;p&gt;Languages also generally offer some kind of string iteration facility,
which doesn&#39;t need to correspond to how a JavaScript host sees strings.
In the case of Python, one can implement &lt;tt&gt;for char in s: print(char)&lt;/tt&gt;
just fine on top of JavaScript strings, by decoding WTF-16 on the fly.
Iterators can also map between, say, UTF-8 offsets and WTF-16 offsets,
allowing e.g. Rust to preserve its preferred &quot;strings are composed of
bytes that are UTF-8 code units&quot; abstraction.&lt;/p&gt;&lt;p&gt;Our O(1) random access problem remains, though.  Are we stuck?&lt;/p&gt;&lt;h3&gt;what does the good world look like&lt;/h3&gt;&lt;p&gt;How should a language represent its strings, anyway?  Here we depart
from a precise gathering of requirements for WebAssembly strings, but in
a useful way, I think: we should build abstractions not only for what
is, but also for what should be.  We should favor a better future;
imagining the ideal helps us design the real.&lt;/p&gt;&lt;p&gt;I keep returning to Henri Sivonen&#39;s authoritative article, &lt;a href=&quot;https://hsivonen.fi/string-length/&quot;&gt;It’s Not
Wrong that &quot;🤦🏼‍♂️&quot;.length == 7, But It’s Better that &quot;🤦🏼‍♂️&quot;.len() == 17
and Rather Useless that len(&quot;🤦🏼‍♂️&quot;) ==
5&lt;/a&gt;.  It is &lt;i&gt;so&lt;/i&gt; good and if you have
reached this point, pop it open in a tab and go through it when you can.
In it, Sivonen argues (among other things) that random access to
codepoints in a string is not actually important; he thinks that if you
were designing Python today, you wouldn&#39;t include this interface in its
standard library.  Users would prefer extended grapheme clusters, which
is variable-length anyway and a bit gnarly to compute; storage wants
bytes; array-of-codepoints is just a bad place in the middle.  Given
that UTF-8 is more space-efficient than either UTF-16 or
array-of-codepoints, and that it embraces the variable-length nature of
encoding, programming languages should just use that.&lt;/p&gt;&lt;p&gt;As a model for how strings are represented, array-of-codepoints is
outdated, as indeed is UTF-16.  Outdated doesn&#39;t mean irrelevant, of
course; there is lots of Python code out there and we have to support it
somehow.  But, if we are designing for the future, we should nudge our
users towards other interfaces.&lt;/p&gt;&lt;p&gt;There is even a case that a JavaScript engine should represent its
strings as UTF-8 internally, despite the fact that JS exposes a UTF-16
view on strings in its API.  The pitch is that UTF-8 takes less memory,
is probably what we get over the network anyway, and is probably what
many of the low-level APIs that a browser uses will want; it would be
faster and lighter-weight to pass UTF-8 to text shaping libraries, for
example, compared to passing UTF-16 or having to copy when going to JS
and when going back.  JavaScript engines already have a dozen internal
string representations or so (narrow or wide, cons or slice or flat,
inline or external, interned or not, and the product of many of those);
adding another is just a Small Matter Of Programming that could show
benefits, even if some strings have to be later transcoded to UTF-16
because JS accesses them in that way.  I have talked with JS engine
people in all the browsers and everyone thinks that UTF-8 has a chance
at being a win; the drawback is that actually implementing it would
take a lot of effort for uncertain payoff.&lt;/p&gt;&lt;p&gt;I have two final data-points to indicate that UTF-8 is the way.  One is
that &lt;a href=&quot;https://swift.org/&quot;&gt;Swift&lt;/a&gt; used to use UTF-16 to represent its
strings, but was able to &lt;a href=&quot;https://www.swift.org/blog/utf8-string/&quot;&gt;switch to
UTF-8&lt;/a&gt;.  To adapt to the newer
performance model of UTF-8, Swift maintainers designed new APIs to allow
users to request a &lt;i&gt;view&lt;/i&gt; on a string: treat this string as UTF-8, or
UTF-16, or a sequence of codepoints, or even a sequence of extended
grapheme clusters.  Their users appear to be happy, and I expect that
many languages will follow Swift&#39;s lead.&lt;/p&gt;&lt;p&gt;Secondly, as a maintainer of the &lt;a href=&quot;https://gnu.org/s/guile/&quot;&gt;Guile
Scheme&lt;/a&gt; implementation, I also want to switch
to UTF-8.  Guile has long used Python&#39;s representation strategy: array
of codepoints, with an optimization if all codepoints are &quot;narrow&quot; (less
than 256).  The Scheme language exposes codepoint-at-offset
(&lt;tt&gt;string-ref&lt;/tt&gt;) as one of its fundamental string access primitives, and
array-of-codepoints maps well to this idiom.  However, we do plan to move to
UTF-8, with a Swift-like
&lt;a href=&quot;https://www.swift.org/blog/utf8-string/#breadcrumbs&quot;&gt;breadcrumbs&lt;/a&gt;
strategy for accelerating per-codepoint access.  We hope to lower memory
consumption, simplify the implementation, and have general (but not
uniform) speedups; some things will be slower but most should be faster.
Over time, users will learn the performance model and adapt to prefer
string builders / iterators (&quot;string ports&quot;) instead of &lt;tt&gt;string-ref&lt;/tt&gt;.&lt;/p&gt;&lt;h3&gt;a solution for webassembly in the browser?&lt;/h3&gt;&lt;p&gt;Let&#39;s try to summarize: it definitely makes sense for Java to use
JavaScript strings when compiled to WebAssembly/GC, when running on the
browser.  There is an OK-ish compilation strategy for this use case
involving &lt;tt&gt;externref&lt;/tt&gt;, &lt;tt&gt;String.prototype.charCodeAt&lt;/tt&gt; imports, and so on,
along with some engine heroics to specially recognize these operations.
There is an &lt;a href=&quot;https://github.com/WebAssembly/js-string-builtins/blob/main/proposals/js-string-builtins/Overview.md&quot;&gt;early
proposal&lt;/a&gt;
to sand off some of the rough edges, to make this use-case a bit more
predictable.  However, there are two limitations:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Focussing on providing JS strings to Wasm/GC is only really good for
Java and friends; the cost of mapping &lt;tt&gt;charCodeAt&lt;/tt&gt; semantics to,
say, Python&#39;s strings is likely too high.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;JS strings are only present on browsers (and Node and such).&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;I see the outcome being that Java will have to keep its implementation
that uses &lt;tt&gt;(array i16)&lt;/tt&gt; when targetting the edge, and use JS strings on
the browser.  I think that polyfills will not have acceptable
performance.  On the edge there will be a binary size penalty and a
performance and functionality gap, relative to the browser.  Some edge
Wasm implementations will be pushed to implement fast JS strings by
their users, even though they don&#39;t have JS on the host.&lt;/p&gt;&lt;p&gt;If the JS string builtins proposal were a local maximum, I could see
putting some energy into it; it does make the Java case a bit better.
However I think it&#39;s likely to be an unstable saddle point; if you are
going to infect the edge with WTF-16 anyway, you might as well step back and
try to solve a problem that is a bit more general than Java on JS.&lt;/p&gt;&lt;h3&gt;stringref: a solution for webassembly?&lt;/h3&gt;&lt;p&gt;I think WebAssembly should just bite the bullet and try to define a
string data type, for languages that use GC.  It should support UTF-8
and UTF-16 views, like Swift&#39;s strings, and support some kind of
iterator API that decodes codepoints.&lt;/p&gt;&lt;p&gt;It should be abstract as regards the concrete representation of strings,
to allow JavaScript strings to stand in for WebAssembly strings, in the
context of the browser.  JS hosts will use UTF-16 as their
internal representation.  Non-JS hosts will likely prefer UTF-8, and
indeed an abstract API favors migration of JS engines away from UTF-16
over the longer term.  And, such an abstraction should give the user control
over what to do for surrogates: allow them, throw an error, or replace
with U+FFFD.&lt;/p&gt;&lt;p&gt;What I describe is what the
&lt;a href=&quot;https://github.com/WebAssembly/stringref/blob/main/proposals/stringref/Overview.md&quot;&gt;stringref&lt;/a&gt;
proposal gives you.  We don&#39;t yet have consensus on this proposal in the
Wasm standardization group, and we may never reach there, although I think
it&#39;s still possible.  As I understand them, the objections are two-fold:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;WebAssembly is an instruction set, like AArch64 or x86.  Strings are
too high-level, and should be built on top, for example with &lt;tt&gt;(array i8)&lt;/tt&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The requirement to support fast WTF-16 code unit access will mean
that we are effectively standardizing JavaScript strings.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;I think the first objection is a bit easier to overcome.  Firstly,
WebAssembly now defines quite a number of components that don&#39;t map to
machine ISAs: typed and extensible locals, &lt;tt&gt;memory.copy&lt;/tt&gt;, and so on.
You could have defined &lt;tt&gt;memory.copy&lt;/tt&gt; in terms of primitive operations,
or required that all local variables be represented on an explicit stack
or in a fixed set of registers, but WebAssembly defines higher-level
interfaces that instead allow for more efficient lowering to machine
primitives, in this case SIMD-accelerated copies or machine-specific
sets of registers.&lt;/p&gt;&lt;p&gt;Similarly with garbage collection, there was a very interesting
&lt;a href=&quot;https://github.com/WebAssembly/exception-handling/issues/105&quot;&gt;&quot;continuation marks&quot;
proposal&lt;/a&gt;
by Ross Tate that would give a low-level primitive on top of which users
could implement root-finding of stack values.  However when choosing
what to include in the standard, the group preferred a more high-level
facility in which a Wasm module declares managed data types and allows
the WebAssembly implementation to do as it sees fit.  This will likely
result in more efficient systems, as a Wasm implementation can more
easily use concurrency and parallelism in the GC implementation than a
guest WebAssembly module could do.&lt;/p&gt;&lt;p&gt;So, the criteria of what to include in the Wasm standard is not &quot;what is
the most minimal primitive that can express this abstraction&quot;, or even
&quot;what looks like an ARMv8 instruction&quot;, but rather &quot;what makes Wasm a
good compilation target&quot;.  Wasm is designed for its compiler-users, not
for the machines that it runs on, and if we manage to find an abstract
definition of strings that works for Wasm-targetting toolchains, we
should think about adding it.&lt;/p&gt;&lt;p&gt;The second objection is trickier.  When you compile to Wasm, you need a
good model of what the performance of the Wasm code that you emit will
be.  Different Wasm implementations may use different stringref
representations; requesting a UTF-16 view on a string that is already
UTF-16 will be cheaper than doing so on a string that is UTF-8.  In the
worst case, requesting a UTF-16 view on a UTF-8 string is a linear
operation on one system but constant-time on another, which in a loop
over string contents makes the former system quadratic: a real
performance failure that we need to design around.&lt;/p&gt;&lt;p&gt;The stringref proposal tries to reify as much of the cost model as
possible with its &quot;view&quot; abstraction; the compiler can reason that any
cost may incur then rather than when accessing a view.  But, this
abstraction can leak, from a performance perspective.  What to do?&lt;/p&gt;&lt;p&gt;I think that if we look back on what the expected outcome of the
JS-strings-for-Java proposal is, I believe that if Wasm succeeds as a
target for Java, we will probably already end up with WTF-16 everywhere.
We might as well admit this, I think, and if we do, then this objection
goes away.  Likewise on the Web I see UTF-8 as being potentially
advantageous in the medium-long term for JavaScript, and certainly
better for other languages, and so I expect JS implementations to also
grow support for fast UTF-8.&lt;/p&gt;&lt;h3&gt;i&#39;m on a horse&lt;/h3&gt;&lt;p&gt;I may be off in some of my predictions about where things will go, so
who knows.  In the meantime, in the time that it takes other people to
reach the same conclusions, stringref is in a kind of hiatus.&lt;/p&gt;&lt;p&gt;The &lt;a href=&quot;https://gitlab.com/spritely/guile-hoot/&quot;&gt;Scheme-to-Wasm compiler&lt;/a&gt;
that I work on does still emit stringref, but it is purely a toolchain
concept now: we have a &lt;a href=&quot;https://gitlab.com/spritely/guile-hoot/-/blob/main/module/wasm/lower-stringrefs.scm&quot;&gt;post-pass that lowers stringref to
WTF-8&lt;/a&gt;
via &lt;tt&gt;(array i8)&lt;/tt&gt;, and which emits calls to host-supplied conversion
routines when passing these strings to and from the host.  When compiling
to Hoot&#39;s built-in Wasm virtual machine, we can leave stringref in, instead of lowering it down,
resulting in more efficient interoperation with the host Guile than if we had to bounce through byte arrays.&lt;/p&gt;&lt;p&gt;So, we wait for now.  Not such a bad situation, at least we have GC coming soon to all the browsers.  appy hacking to all my stringfolk, and until next time!&lt;/p&gt;&lt;/div&gt; </description> 
	<pubDate>Thu, 19 Oct 2023 10:33:58 +0000</pubDate>

</item> 
<item>
	<title>texinfo @ Savannah: Texinfo 7.1 released</title>
	<guid>https://savannah.gnu.org/news/?id=10524</guid>
	<link>https://savannah.gnu.org/news/?id=10524</link>
     <description>  &lt;p&gt;We have released version 7.1 of Texinfo, the GNU documentation format.
&lt;br /&gt;

&lt;br /&gt;
It&#39;s available via a mirror (xz is much smaller than gz, but gz is available too just in case):
&lt;br /&gt;

&lt;br /&gt;
&lt;a href=&quot;http://ftpmirror.gnu.org/texinfo/texinfo-7.1.tar.xz&quot;&gt;http://ftpmirror.gnu.org/texinfo/texinfo-7.1.tar.xz&lt;/a&gt;
&lt;br /&gt;
&lt;a href=&quot;http://ftpmirror.gnu.org/texinfo/texinfo-7.1.tar.gz&quot;&gt;http://ftpmirror.gnu.org/texinfo/texinfo-7.1.tar.gz&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Please send any comments to bug-texinfo@gnu.org.
&lt;br /&gt;

&lt;br /&gt;
Full announcement:
&lt;br /&gt;

&lt;br /&gt;
&lt;a href=&quot;https://lists.gnu.org/archive/html/info-gnu/2023-10/msg00003.html&quot;&gt;https://lists.gnu.org/archive/html/info-gnu/2023-10/msg00003.html&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Wed, 18 Oct 2023 14:57:56 +0000</pubDate>

</item> 
<item>
	<title>poke @ Savannah: GNU poke now available in PTXdist</title>
	<guid>https://savannah.gnu.org/news/?id=10523</guid>
	<link>https://savannah.gnu.org/news/?id=10523</link>
     <description>  &lt;p&gt;Alexander Dahl has packaged poke [1] for PTXdist, which is a build system for embedded GNU/Linux images.  It is interesting to think about possible applications of having poke in embedded systems such as routers, multimedia players and the like...
&lt;br /&gt;

&lt;br /&gt;
Thank you Alexander!
&lt;br /&gt;

&lt;br /&gt;
[1] &lt;a href=&quot;https://git.pengutronix.de/cgit/ptxdist/commit/?id=e6ec9f74f041658f3453f3b7ec4ba4b90e854f26&quot;&gt;https://git.pengutronix.de/cgit/ptxdist/commit/?id=e6ec9f74f041658f3453f3b7ec4ba4b90e854f26&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Wed, 18 Oct 2023 13:25:25 +0000</pubDate>

</item> 
<item>
	<title>Gary Benson: sudo tee &gt;/dev/null</title>
	<guid>https://gbenson.net/?p=932</guid>
	<link>https://gbenson.net/sudo-tee-dev-null/</link>
     <description>  &lt;p&gt;Need to redirect to a file from &lt;code&gt;sudo&lt;/code&gt;?  Use &lt;code&gt;sudo tee &amp;gt;/dev/null&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;$ &lt;strong style=&quot;color: green;&quot;&gt;sudo ls -l /root &amp;gt;/root/files.list&lt;/strong&gt;
-bash: /root/files.list: Permission denied
$ &lt;strong style=&quot;color: green;&quot;&gt;sudo ls -l /root | sudo tee /root/files.list &amp;gt;/dev/null&lt;/strong&gt;
$ &lt;strong style=&quot;color: green;&quot;&gt;sudo ls -l /root/files.list&lt;/strong&gt;
-rw-r--r-- 1 root root 94 Oct 18 09:31 /root/files.list&lt;/pre&gt; </description> 
	<pubDate>Wed, 18 Oct 2023 08:40:58 +0000</pubDate>

</item> 
<item>
	<title>GNU MediaGoblin: MediaGoblin 0.13.0</title>
	<guid>tag:mediagoblin.org,2023-10-18:/news/mediagoblin-0.13.0-release.html</guid>
	<link>https://mediagoblin.org/news/mediagoblin-0.13.0-release.html</link>
     <description>  &lt;p&gt;We&#39;re pleased to announce the release of MediaGoblin 0.13.0. See the &lt;a href=&quot;https://docs.mediagoblin.org/en/stable/siteadmin/relnotes.html&quot;&gt;release
notes&lt;/a&gt; for full
details and upgrading instructions.&lt;/p&gt;
&lt;p&gt;This minor release adds support for Python 3.10 and 3.11 and drops support for
Python versions prior to 3.7. It also upgrades a number of Python dependencies
and adds a few small bug fixes and improvements.&lt;/p&gt;
&lt;p&gt;This version has been tested on Debian Bullseye (11), Debian Bookworm (12),
Ubuntu 20.04, Ubuntu 22.04 and Fedora 39.&lt;/p&gt;
&lt;p&gt;Thanks go to Olivier Mehani, Michael McMahon, Andrew Dudash for their
contributions in this release!&lt;/p&gt;
&lt;p&gt;To join us and help improve MediaGoblin, please visit our &lt;a href=&quot;https://mediagoblin.org/pages/join.html&quot;&gt;getting
involved&lt;/a&gt; page.&lt;/p&gt; </description> 
	<pubDate>Wed, 18 Oct 2023 05:00:00 +0000</pubDate>

</item> 
<item>
	<title>German Arias: FisicaLab 0.4.0 is out!</title>
	<guid>http://gnutopics.wordpress.com/?p=185</guid>
	<link>https://gnutopics.wordpress.com/2023/10/16/fisicalab-0-4-0-is-out/</link>
     <description>  &lt;p&gt;After many years &lt;a href=&quot;https://www.gnu.org/software/fisicalab/&quot;&gt;FisicaLab&lt;/a&gt; 0.4.0 is available. Comes with a new module for thermodynamics and a bug fixed in chalkboard. Most changes are internal, a reorganization of different solvers that will make easy, in future versions, save and load physics problems from a file. Due to a bug in &lt;a href=&quot;http://www.gnustep.org&quot;&gt;GNUstep&lt;/a&gt; with Tool Tips, now there is an alternative interface based on &lt;a href=&quot;https://www.tecgraf.puc-rio.br/iup/&quot;&gt;IUP&lt;/a&gt;. Tool Tips are used in FisicaLab to show information of each element at chalkboard. For the moment there ins´t binary packages. But maybe later.&lt;/p&gt; </description> 
	<pubDate>Mon, 16 Oct 2023 07:09:52 +0000</pubDate>

</item> 
<item>
	<title>FSF News: LibrePlanet 2024: &quot;Cultivating Community&quot; will feature a keynote by David Wilson</title>
	<guid>http://www.fsf.org/news/libreplanet-2024-cultivating-community-will-feature-a-keynote-by-david-wilson</guid>
	<link>http://www.fsf.org/news/libreplanet-2024-cultivating-community-will-feature-a-keynote-by-david-wilson</link>
     <description>  BOSTON, Massachusetts, USA -- October 10, 2023 -- The Free
Software Foundation (FSF) today announced free software
developer and video creator David Wilson, as its first keynote
speaker for LibrePlanet 2024, the sixteenth edition of the
FSF&#39;s conference on ethical technology and user freedom.
LibrePlanet will be held in March in the Boston area as well as
online. </description> 
	<pubDate>Tue, 10 Oct 2023 21:30:00 +0000</pubDate>

</item> 
<item>
	<title>poke @ Savannah: New GNU poke co-maintainer</title>
	<guid>https://savannah.gnu.org/news/?id=10521</guid>
	<link>https://savannah.gnu.org/news/?id=10521</link>
     <description>  &lt;p&gt;I am happy to announce that Mohammad-Reza Nabipoor has just been
&lt;br /&gt;
appointed as GNU co-maintainer of poke.  When Mohammad joined the
&lt;br /&gt;
development he brough his enthusiam with him, and has contributed lots of good code, ideas and also helped organizing events, doing great talks, and even printing a batch of the mighty poke t-shirts.
&lt;br /&gt;

&lt;br /&gt;
Starting with poke 4, I plan to delegate on Mohammad the maintenance of the stable series, backporting fixes to the corresponding maintenance branches and doing releases whenever appropriate.  That will allow me more time to focus on the development master branch.
&lt;br /&gt;

&lt;br /&gt;
Congrats and thank you Mohammad!
&lt;br /&gt;

&lt;br /&gt;
--
&lt;br /&gt;
Jose E. Marchesi
&lt;br /&gt;
Friday 6 October 2023
&lt;br /&gt;
Frankfurt am Main&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Fri, 06 Oct 2023 11:14:22 +0000</pubDate>

</item> 
<item>
	<title>gettext @ Savannah: GNU gettext 0.22.3 released</title>
	<guid>https://savannah.gnu.org/news/?id=10520</guid>
	<link>https://savannah.gnu.org/news/?id=10520</link>
     <description>  &lt;p&gt;Download from &lt;a href=&quot;https://ftp.gnu.org/pub/gnu/gettext/gettext-0.22.3.tar.gz&quot;&gt;https://ftp.gnu.org/pub/gnu/gettext/gettext-0.22.3.tar.gz&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
This is a bug-fix 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;Portability:
&lt;ul&gt;
&lt;li&gt;The libintl library now works on macOS 14.  (Older versions of libintl crash on macOS 14, due to an incompatible change in macOS.)
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt; </description> 
	<pubDate>Thu, 05 Oct 2023 08:00:29 +0000</pubDate>

</item> 
<item>
	<title>FSF News: The third round of FSF board candidate discussions has begun</title>
	<guid>http://www.fsf.org/news/the-third-round-of-fsf-board-candidate-discussions-has-begun</guid>
	<link>http://www.fsf.org/news/the-third-round-of-fsf-board-candidate-discussions-has-begun</link>
     <description>  All eligible associate members are invited to participate in the
final round of this cycle&#39;s FSF board candidate discussions, as
part of its board process. </description> 
	<pubDate>Tue, 03 Oct 2023 20:48:50 +0000</pubDate>

</item> 
<item>
	<title>FSF News: FSF celebrates forty years of GNU with a hackday for families, hackers, and hackers-to-be</title>
	<guid>http://www.fsf.org/news/fsf-celebrates-forty-years-of-gnu-with-a-hackday-for-families-hackers-and-hackers-to-be</guid>
	<link>http://www.fsf.org/news/fsf-celebrates-forty-years-of-gnu-with-a-hackday-for-families-hackers-and-hackers-to-be</link>
     <description>  BOSTON, Massachusetts, USA -- Wednesday, September 27, 2023 --
Today, the GNU Project turned forty years old. To celebrate this,
the Free Software Foundation (FSF) is hosting a hack day for
families, students, and anyone interested in hacking. </description> 
	<pubDate>Wed, 27 Sep 2023 18:02:00 +0000</pubDate>

</item> 
<item>
	<title>parallel @ Savannah: GNU Parallel 20230922 (&#39;Derna&#39;) released [stable]</title>
	<guid>https://savannah.gnu.org/news/?id=10516</guid>
	<link>https://savannah.gnu.org/news/?id=10516</link>
     <description>  &lt;p&gt;GNU Parallel 20230922 (&#39;Derna&#39;) 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 is so damn good! You’ve got to use it.
&lt;br /&gt;
    -- @ThePrimeTimeagen@youtube.com
&lt;br /&gt;

&lt;br /&gt;
New in this release:
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No new features. This is a candidate for a stable release.
&lt;/li&gt;
&lt;li&gt;Bug fixes and man page updates.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
News about GNU Parallel:
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This CLI Tool is AMAZING | Prime Reacts &lt;a href=&quot;https://www.youtube.com/watch?v=ry49BZA-tgg&quot;&gt;https://www.youtube.com/watch?v=ry49BZA-tgg&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;New Data Engineering Stack - GNU parallel &lt;a href=&quot;https://www.linkedin.com/feed/update/urn:li:activity:7100509073149743104?updateEntityUrn=urn%3Ali%3Afs_feedUpdate%3A%28V2%2Curn%3Ali%3Aactivity%3A7100509073149743104%29&quot;&gt;https://www.linkedin.com/feed/update/urn:li:activity:7100509073149743104?updateEntityUrn=urn%3Ali%3Afs_feedUpdate%3A%28V2%2Curn%3Ali%3Aactivity%3A7100509073149743104%29&lt;/a&gt;
&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 &#39;*.jpg&#39; |
&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=&quot;http://www.gnu.org/s/parallel/&quot;&gt;http://www.gnu.org/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=&quot;http://pi.dk/3&quot;&gt;http://pi.dk/3&lt;/a&gt; ) &amp;gt; install.sh
&lt;br /&gt;
    $ sha1sum install.sh | grep 883c667e01eed62f975ad28b6d50e22a
&lt;br /&gt;
    12345678 883c667e 01eed62f 975ad28b 6d50e22a
&lt;br /&gt;
    $ md5sum install.sh | grep cc21b4c943fd03e93ae1ae49e28573c0
&lt;br /&gt;
    cc21b4c9 43fd03e9 3ae1ae49 e28573c0
&lt;br /&gt;
    $ sha512sum install.sh | grep ec113b49a54e705f86d51e784ebced224fdff3f52
&lt;br /&gt;
    79945d9d 250b42a4 2067bb00 99da012e c113b49a 54e705f8 6d51e784 ebced224
&lt;br /&gt;
    fdff3f52 ca588d64 e75f6033 61bd543f d631f592 2f87ceb2 ab034149 6df84a35
&lt;br /&gt;
    $ bash install.sh
&lt;br /&gt;

&lt;br /&gt;
Watch the intro video on &lt;a href=&quot;http://www.youtube.com/playlist?list=PL284C9FF2488BC6D1&quot;&gt;http://www.youtube.com/playlist?list=PL284C9FF2488BC6D1&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=&quot;https://doi.org/10.5281/zenodo.1146014&quot;&gt;https://doi.org/10.5281/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=&quot;https://gnuparallel.threadless.com/designs/gnu-parallel&quot;&gt;https://gnuparallel.threadless.com/designs/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=&quot;https://my.fsf.org/donate/&quot;&gt;https://my.fsf.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&#39; 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&#39;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, 24 Sep 2023 19:37:13 +0000</pubDate>

</item> 
<item>
	<title>health @ Savannah: Release of GNU Health HMIS 4.2.3 patchset</title>
	<guid>https://savannah.gnu.org/news/?id=10515</guid>
	<link>https://savannah.gnu.org/news/?id=10515</link>
     <description>  &lt;p&gt;Dear community
&lt;br /&gt;

&lt;br /&gt;
GNU Health 4.2.3 patchset has been released !
&lt;br /&gt;

&lt;br /&gt;
&lt;b&gt;Priority&lt;/b&gt;: High
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;h2&gt;Table of Contents&lt;/h2&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;About GNU Health Patchsets
&lt;/li&gt;
&lt;li&gt;Updating your system with the GNU Health control Center
&lt;/li&gt;
&lt;li&gt;Installation notes
&lt;/li&gt;
&lt;li&gt;List of other issues related to this patchset
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;h2&gt;About GNU Health Patchsets&lt;/h2&gt;
&lt;p&gt;
&lt;br /&gt;
We provide &quot;patchsets&quot; to stable releases. Patchsets allow applying bug fixes and updates on production systems. Always try to keep your production system up-to-date with the latest patches.
&lt;br /&gt;

&lt;br /&gt;
Patches and Patchsets maximize uptime for production systems, and keep your system updated, without the need to do a whole installation. 
&lt;br /&gt;

&lt;br /&gt;
NOTE: Patchsets are applied on previously installed systems only. For new, fresh installations, download and install the whole tarball (ie, gnuhealth-4.2.3.tar.gz)
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;h2&gt;Updating your system with the GNU Health control Center&lt;/h2&gt;
&lt;p&gt;
&lt;br /&gt;
Starting GNU Health 3.x series, you can do automatic updates on the GNU Health HMIS kernel and modules using the GNU Health control center program. 
&lt;br /&gt;

&lt;br /&gt;
Please refer to the administration manual section ( &lt;a href=&quot;https://en.wikibooks.org/wiki/GNU_Health/Control_Center&quot;&gt;https://en.wikibooks.org/wiki/GNU_Health/Control_Center&lt;/a&gt; ) 
&lt;br /&gt;

&lt;br /&gt;
The GNU Health control center works on standard installations (those done following the installation manual on wikibooks). Don&#39;t use it if you use an alternative method or if your distribution does not follow the GNU Health packaging guidelines.
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;h2&gt;Installation Notes&lt;/h2&gt;
&lt;p&gt;
&lt;br /&gt;
You must apply previous patchsets before installing this patchset. If your patchset level is 4.2.2, then just follow the general instructions. You can find the patchsets at GNU Health main download site at GNU.org (&lt;a href=&quot;https://ftp.gnu.org/gnu/health/&quot;&gt;https://ftp.gnu.org/gnu/health/&lt;/a&gt;)
&lt;br /&gt;

&lt;br /&gt;
In most cases, GNU Health Control center (gnuhealth-control) takes care of applying the patches for you.  
&lt;br /&gt;

&lt;br /&gt;
Pre-requisites for upgrade to 4.2.3: None
&lt;br /&gt;

&lt;br /&gt;
Now follow the general instructions at 
&lt;br /&gt;
 &lt;a href=&quot;https://en.wikibooks.org/wiki/GNU_Health/Control_Center&quot;&gt;https://en.wikibooks.org/wiki/GNU_Health/Control_Center&lt;/a&gt; 
&lt;br /&gt;

&lt;br /&gt;
 
&lt;br /&gt;
After applying the patches, make a full update of your GNU Health database as explained in the documentation.
&lt;br /&gt;

&lt;br /&gt;
When running &quot;gnuhealth-control&quot; for the first time, you will see the following message: &quot;Please restart now the update with the new control center&quot; Please do so. Restart the process and the update will continue.
&lt;br /&gt;
 
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Restart the GNU Health server
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;h2&gt;List of other issues and tasks related to this patchset&lt;/h2&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;&lt;a href=&quot;https://savannah.gnu.org/bugs/?64712&quot;&gt;bug #64712&lt;/a&gt;&lt;/i&gt;: Bug afer installing patcheset 4.2.2 
&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;a href=&quot;https://savannah.gnu.org/bugs/?64706&quot;&gt;bug #64706&lt;/a&gt;&lt;/i&gt;: Error saving party with photo due to PIL deprecation of ANTIALIAS
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
For detailed information about each issue, you can visit :
&lt;br /&gt;
 &lt;a href=&quot;https://savannah.gnu.org/bugs/?group=health&quot;&gt;https://savannah.gnu.org/bugs/?group=health&lt;/a&gt;
&lt;br /&gt;
 
&lt;br /&gt;
About each task, you can visit:
&lt;br /&gt;
 &lt;a href=&quot;https://savannah.gnu.org/task/?group=health&quot;&gt;https://savannah.gnu.org/task/?group=health&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
For detailed information you can read about Patches and Patchsets
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://en.wikibooks.org/wiki/GNU_Health/Patches_and_Patchsets&quot;&gt;https://en.wikibooks.org/wiki/GNU_Health/Patches_and_Patchsets&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt; </description> 
	<pubDate>Sun, 24 Sep 2023 16:20:59 +0000</pubDate>

</item> 
<item>
	<title>GNUnet News: GNUnet 0.20.0</title>
	<guid>https://gnunet.org/en/news/2023-09-0.20.0.html</guid>
	<link>https://gnunet.org/en/news/2023-09-0.20.0.html</link>
     <description>  &lt;article id=&quot;newspost-content&quot;&gt;
 
  &lt;h1&gt;
   GNUnet 0.20.0 released
  &lt;/h1&gt;
  &lt;p&gt;
   We are pleased to announce the release of GNUnet 0.20.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.
  It breaks protocol compatibility with the 0.19.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.19.x GNUnet network, and interactions between old and new peers
  will result in issues.  0.19.x peers will be able to communicate with Git
  master or 0.20.x peers, but some services will not be compatible.
   &lt;br /&gt;
   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.20.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=&quot;http://ftpmirror.gnu.org/gnunet/gnunet-0.20.0.tar.gz&quot;&gt;
     gnunet-0.20.0.tar.gz
    &lt;/a&gt;
    (
    &lt;a href=&quot;http://ftpmirror.gnu.org/gnunet/gnunet-0.20.0.tar.gz.sig&quot;&gt;
     signature
    &lt;/a&gt;
    )
   &lt;/li&gt;
   &lt;li&gt;
    &lt;a href=&quot;http://ftpmirror.gnu.org/gnunet/gnunet-gtk-0.20.0.tar.gz&quot;&gt;
     gnunet-gtk-0.20.0.tar.gz
    &lt;/a&gt;
    (
    &lt;a href=&quot;http://ftpmirror.gnu.org/gnunet/gnunet-gtk-0.20.0.tar.gz.sig&quot;&gt;
     signature
    &lt;/a&gt;
    )
   &lt;/li&gt;
   &lt;li&gt;
    &lt;a href=&quot;http://ftpmirror.gnu.org/gnunet/gnunet-fuse-0.20.0.tar.gz&quot;&gt;
     gnunet-fuse-0.20.0.tar.gz
    &lt;/a&gt;
    (
    &lt;a href=&quot;http://ftpmirror.gnu.org/gnunet/gnunet-fuse-0.20.0.tar.gz.sig&quot;&gt;
     signature
    &lt;/a&gt;
    )
   &lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;
   The GPG key used to sign is:
   &lt;a href=&quot;https://www.gnunet.org/~schanzen/3D11063C10F98D14BD24D1470B0998EF86F59B6A&quot;&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=&quot;http://ftp.gnu.org/gnu/gnunet/&quot;&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
   &lt;a href=&quot;https://git.gnunet.org/gnunet.git/log/?h=v0.20.0&quot;&gt;
    git log
   &lt;/a&gt;
   , the
   &lt;a href=&quot;https://git.gnunet.org/gnunet.git/tree/NEWS?h=v0.20.0&quot;&gt;
    NEWS
   &lt;/a&gt;
   and
the
   &lt;a href=&quot;https://bugs.gnunet.org/changelog_page.php?version_id=417&quot;&gt;
    bug tracker
   &lt;/a&gt;
   .
  &lt;/p&gt;
  &lt;h4&gt;
   Known Issues
  &lt;/h4&gt;
  &lt;ul&gt;
   &lt;li&gt;
    There are known major design issues in the TRANSPORT, ATS and CORE subsystems which will need to be addressed in the future to achieve acceptable usability, performance and security.
   &lt;/li&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;li&gt;
    Some high-level tests in the test-suite fail non-deterministically due to the low-level TRANSPORT issues.
   &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=&quot;https://bugs.gnunet.org/&quot;&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, t3sserakt, TheJackiMonster, Marshall Stone, Özgür Kesim and Martin Schanzenbach.
  &lt;/p&gt;
 
&lt;/article&gt; </description> 
	<pubDate>Sat, 23 Sep 2023 22:00:00 +0000</pubDate>

</item> 
<item>
	<title>unifont @ Savannah: Unifont 15.1.02 Released</title>
	<guid>https://savannah.gnu.org/news/?id=10514</guid>
	<link>https://savannah.gnu.org/news/?id=10514</link>
     <description>  &lt;p&gt;&lt;b&gt;21 September 2023&lt;/b&gt; Unifont 15.1.02 is now available.
&lt;br /&gt;
This is a minor release.  It adjusts 46 glyphs in the Wen Quan Yi range, and adds Plane 3 ideographs.  This release no longer builds TrueType fonts by default, as announced over the past year.  They have been replaced with their OpenType equivalents.  TrueType fonts can still be built manually by typing &quot;make truetype&quot; in the font directory.
&lt;br /&gt;

&lt;br /&gt;
This release also includes a new Hangul Syllables Johab 6/3/1 encoding proposed by Ho-Seok Ee.  New Hangul supporting software for this encoding allows formation of all double-width Hangul syllables, including those with ancient letters that are outside the Unicode Hangul Syllables range.  Details are in the ChangeLog file.
&lt;br /&gt;

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

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

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

&lt;br /&gt;
     &lt;a href=&quot;https://ftp.gnu.org/gnu/unifont/unifont-15.1.02/&quot;&gt;https://ftp.gnu.org/gnu/unifont/unifont-15.1.02/&lt;/a&gt;
&lt;br /&gt;

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

&lt;br /&gt;
     &lt;a href=&quot;ftp://ftp.gnu.org/gnu/unifont/unifont-15.1.02/&quot;&gt;ftp://ftp.gnu.org/gnu/unifont/unifont-15.1.02/&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=&quot;https://unifoundry.com/pub/unifont/unifont-15.1.02/&quot;&gt;https://unifoundry.com/pub/unifont/unifont-15.1.02/&lt;/a&gt;
&lt;br /&gt;

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

&lt;br /&gt;
     &lt;a href=&quot;https://unifoundry.com/pub/unifont/unifont-15.1.02/font-builds/&quot;&gt;https://unifoundry.com/pub/unifont/unifont-15.1.02/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=&quot;https://unifoundry.com/unifont/index.html&quot;&gt;https://unifoundry.com/unifont/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=&quot;https://unifoundry.com/unifont/unifont-utilities.html&quot;&gt;https://unifoundry.com/unifont/unifont-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=&quot;https://unifoundry.com/hangul/index.html&quot;&gt;https://unifoundry.com/hangul/index.html&lt;/a&gt;
&lt;br /&gt;

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

&lt;br /&gt;
      &lt;a href=&quot;http://unifoundry.com/hangul/hangul-generation.html&quot;&gt;http://unifoundry.com/hangul/hangul-generation.html&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Fri, 22 Sep 2023 04:05:18 +0000</pubDate>

</item> 
<item>
	<title>gettext @ Savannah: GNU gettext 0.22.1 released</title>
	<guid>https://savannah.gnu.org/news/?id=10513</guid>
	<link>https://savannah.gnu.org/news/?id=10513</link>
     <description>  &lt;p&gt;Download from &lt;a href=&quot;https://ftp.gnu.org/pub/gnu/gettext/gettext-0.22.1.tar.gz&quot;&gt;https://ftp.gnu.org/pub/gnu/gettext/gettext-0.22.1.tar.gz&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
This is a bug-fix 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;Bug fixes:
&lt;ul&gt;
&lt;li&gt;The libintl shared library now exports again some symbols that were accidentally missing.
&lt;/li&gt;
&lt;li&gt;xgettext&#39;s processing of large Perl files may have led to errors.
&lt;/li&gt;
&lt;li&gt;&quot;xgettext --join-existing&quot; could encounter errors.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Portability:
&lt;ul&gt;
&lt;li&gt;Building on Android is now supported.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt; </description> 
	<pubDate>Tue, 19 Sep 2023 08:35:35 +0000</pubDate>

</item> 
<item>
	<title>FSF News: Forty years of GNU and the free software movement</title>
	<guid>http://www.fsf.org/news/forty-years-of-gnu-and-the-free-software-movement</guid>
	<link>http://www.fsf.org/news/forty-years-of-gnu-and-the-free-software-movement</link>
     <description>  BOSTON, Massachusetts, USA -- September, 18, 2023 -- On September
27, the Free Software Foundation (FSF) celebrates the 40th
anniversary of the GNU operating system and the launch of the
free software movement. Free software advocates, tinkerers, and
hackers all over the world will celebrate this event, which was a
turning point in the history of computing. Forty years later, GNU and
free software are even more relevant. While software has become deeply
ingrained into everyday life, the vast majority of users do not have
full control over it. </description> 
	<pubDate>Mon, 18 Sep 2023 21:55:00 +0000</pubDate>

</item> 
<item>
	<title>health @ Savannah: GNUHealth Hospital Management 4.2.2 patchset released</title>
	<guid>https://savannah.gnu.org/news/?id=10511</guid>
	<link>https://savannah.gnu.org/news/?id=10511</link>
     <description>  &lt;p&gt;Dear community
&lt;br /&gt;

&lt;br /&gt;
GNU Health 4.2.2 patchset has been released !
&lt;br /&gt;

&lt;br /&gt;
&lt;b&gt;Priority&lt;/b&gt;: High
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;h2&gt;Table of Contents&lt;/h2&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;About GNU Health Patchsets
&lt;/li&gt;
&lt;li&gt;Updating your system with the GNU Health control Center
&lt;/li&gt;
&lt;li&gt;Installation notes
&lt;/li&gt;
&lt;li&gt;List of other issues related to this patchset
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;h2&gt;About GNU Health Patchsets&lt;/h2&gt;
&lt;p&gt;
&lt;br /&gt;
We provide &quot;patchsets&quot; to stable releases. Patchsets allow applying bug fixes and updates on production systems. Always try to keep your production system up-to-date with the latest patches.
&lt;br /&gt;

&lt;br /&gt;
Patches and Patchsets maximize uptime for production systems, and keep your system updated, without the need to do a whole installation. 
&lt;br /&gt;

&lt;br /&gt;
NOTE: Patchsets are applied on previously installed systems only. For new, fresh installations, download and install the whole tarball (ie, gnuhealth-4.2.2.tar.gz)
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;h2&gt;Updating your system with the GNU Health control Center&lt;/h2&gt;
&lt;p&gt;
&lt;br /&gt;
Starting GNU Health 3.x series, you can do automatic updates on the GNU Health HMIS kernel and modules using the GNU Health control center program. 
&lt;br /&gt;

&lt;br /&gt;
Please refer to the administration manual section ( &lt;a href=&quot;https://en.wikibooks.org/wiki/GNU_Health/Control_Center&quot;&gt;https://en.wikibooks.org/wiki/GNU_Health/Control_Center&lt;/a&gt; ) 
&lt;br /&gt;

&lt;br /&gt;
The GNU Health control center works on standard installations (those done following the installation manual on wikibooks). Don&#39;t use it if you use an alternative method or if your distribution does not follow the GNU Health packaging guidelines.
&lt;br /&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;h2&gt;Installation Notes&lt;/h2&gt;
&lt;p&gt;
&lt;br /&gt;
You must apply previous patchsets before installing this patchset. If your patchset level is 4.2.1, then just follow the general instructions. You can find the patchsets at GNU Health main download site at GNU.org (&lt;a href=&quot;https://ftp.gnu.org/gnu/health/&quot;&gt;https://ftp.gnu.org/gnu/health/&lt;/a&gt;)
&lt;br /&gt;

&lt;br /&gt;
In most cases, GNU Health Control center (gnuhealth-control) takes care of applying the patches for you.  
&lt;br /&gt;

&lt;br /&gt;
Pre-requisites for upgrade to 4.2.2: None
&lt;br /&gt;

&lt;br /&gt;
Now follow the general instructions at 
&lt;br /&gt;
 &lt;a href=&quot;https://en.wikibooks.org/wiki/GNU_Health/Control_Center&quot;&gt;https://en.wikibooks.org/wiki/GNU_Health/Control_Center&lt;/a&gt; 
&lt;br /&gt;

&lt;br /&gt;
 
&lt;br /&gt;
After applying the patches, make a full update of your GNU Health database as explained in the documentation.
&lt;br /&gt;

&lt;br /&gt;
When running &quot;gnuhealth-control&quot; for the first time, you will see the following message: &quot;Please restart now the update with the new control center&quot; Please do so. Restart the process and the update will continue.
&lt;br /&gt;
 
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Restart the GNU Health server
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;h2&gt;List of bugs and tasks related to this patchset&lt;/h2&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;&lt;a href=&quot;https://savannah.gnu.org/bugs/?64269&quot;&gt;bug #64269&lt;/a&gt;&lt;/i&gt;: get_serial function of LabTest class in health_crypto_lab.py need conside add units.name
&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;a href=&quot;https://savannah.gnu.org/bugs/?64386&quot;&gt;bug #64386&lt;/a&gt;&lt;/i&gt;: Automatically update the appointment sequence when state is confirm
&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;a href=&quot;https://savannah.gnu.org/bugs/?64432&quot;&gt;bug #64432&lt;/a&gt;&lt;/i&gt;: Gestational weeks show floating point instead of weeks
&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;a href=&quot;https://savannah.gnu.org/bugs/?64457&quot;&gt;bug #64457&lt;/a&gt;&lt;/i&gt;: Patient automatic critical information entries should be unique
&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;a href=&quot;https://savannah.gnu.org/bugs/?64530&quot;&gt;bug #64530&lt;/a&gt;&lt;/i&gt;: traceback on evaluation page of life if no institution is given
&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;a href=&quot;https://savannah.gnu.org/bugs/?64665&quot;&gt;bug #64665&lt;/a&gt;&lt;/i&gt;: Product cost_price needs to be passed as an argument in stock moves
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;

&lt;br /&gt;
For detailed information about each issue, you can visit :
&lt;br /&gt;
 &lt;a href=&quot;https://savannah.gnu.org/bugs/?group=health&quot;&gt;https://savannah.gnu.org/bugs/?group=health&lt;/a&gt;
&lt;br /&gt;
 
&lt;br /&gt;
About each task, you can visit:
&lt;br /&gt;
 &lt;a href=&quot;https://savannah.gnu.org/task/?group=health&quot;&gt;https://savannah.gnu.org/task/?group=health&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
For detailed information you can read about Patches and Patchsets
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://en.wikibooks.org/wiki/GNU_Health/Patches_and_Patchsets&quot;&gt;https://en.wikibooks.org/wiki/GNU_Health/Patches_and_Patchsets&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt; </description> 
	<pubDate>Sun, 17 Sep 2023 14:03:35 +0000</pubDate>

</item> 
<item>
	<title>GNU Health: Caminos Cruzados and GNU Solidario join forces in healthcare for Gambia with GNU Health</title>
	<guid>https://my.gnusolidario.org/?p=1947</guid>
	<link>https://my.gnusolidario.org/2023/09/15/caminos-cruzados-and-gnu-solidario-join-forces-in-healthcare-for-gambia-with-gnu-health/</link>
     <description>  &lt;p&gt;We’re very happy to announce that “Caminos cruzados”, a Spanish non-for-profit organization, has signed an agreement with GNU Solidario to implement GNU Health in health institutions from Gambia. &lt;/p&gt;


&lt;div class=&quot;wp-block-image&quot;&gt;
&lt;figure class=&quot;aligncenter size-large is-resized&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1953&quot; height=&quot;768&quot; src=&quot;https://my.gnusolidario.org/wp-content/uploads/2023/09/LOGO-CAMINOS-CRUZADOS-1024x1024.jpg&quot; width=&quot;768&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;


&lt;p&gt;María Eugenia Ramos, president of the organization traveled to Gran Canaria to meet with Luis Falcón, president of GNU Solidario to formalize the agreement and to plan the next actions in the Gambia.&lt;/p&gt;



&lt;p&gt;During these three days we went through the main functionality of the GNU Health HMIS, with focus in the areas of  Social Medicine, Primary Care and Public Health.&lt;/p&gt;


&lt;div class=&quot;wp-block-image&quot;&gt;
&lt;figure class=&quot;aligncenter size-full is-resized&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1949&quot; height=&quot;470&quot; src=&quot;https://my.gnusolidario.org/wp-content/uploads/2023/09/image-1.png&quot; width=&quot;628&quot; /&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;Classroom before the renovation (source: Caminos Cruzados)&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;


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



&lt;p&gt;Caminos Cruzados and GNU Solidario share the goals of health and education are indivisible entities. In fact education is health, and there is no healthy person or society without education.&lt;/p&gt;


&lt;div class=&quot;wp-block-image&quot;&gt;
&lt;figure class=&quot;aligncenter size-medium is-resized&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1950&quot; height=&quot;470&quot; src=&quot;https://my.gnusolidario.org/wp-content/uploads/2023/09/image-2-300x225.png&quot; width=&quot;628&quot; /&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;Current state of some classrooms after renovation process (Source: Caminos Cruzados)&lt;br /&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;


&lt;p&gt;In the area of health, the NGO collaborates with the &lt;strong&gt;Ndungu Kebbeh&lt;/strong&gt; health center, that takes care of a population around 8000 people, in addition to the surrounding villages.&lt;/p&gt;


&lt;div class=&quot;wp-block-image&quot;&gt;
&lt;figure class=&quot;aligncenter size-full&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1952&quot; height=&quot;612&quot; src=&quot;https://my.gnusolidario.org/wp-content/uploads/2023/09/image-4.png&quot; width=&quot;816&quot; /&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;Ndungu Kebbeh health center (Source: Caminos Cruzados)&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;


&lt;p&gt;We are very excited about this agreement, and can’t wait to start collaborating with Caminos Cruzados and the local team in Gambia to implement GNU Health in the different Health institutions. GNU Health will definitely help optimizing the internal processes and resources in the health institutions, and most importantly,  will contribute to optimize the health promotion and disease prevention programs for the betterment of their people.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;Resources:&lt;/h3&gt;



&lt;p&gt;Caminos Cruzados: &lt;a href=&quot;http://www.caminoscruzados.org&quot;&gt;http://www.caminoscruzados.org&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;GNU Solidario: &lt;a href=&quot;https://www.gnusolidario.org&quot;&gt;https://www.gnusolidario.org&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;GNU Health: &lt;a href=&quot;https://www.gnuhealth.org&quot;&gt;https://www.gnuhealth.org&lt;/a&gt;&lt;/p&gt;



&lt;p&gt; &lt;/p&gt; </description> 
	<pubDate>Fri, 15 Sep 2023 19:52:42 +0000</pubDate>

</item> 
<item>
	<title>unifont @ Savannah: Unifont 15.1.01 Released</title>
	<guid>https://savannah.gnu.org/news/?id=10510</guid>
	<link>https://savannah.gnu.org/news/?id=10510</link>
     <description>  &lt;p&gt;&lt;b&gt;12 September 2023&lt;/b&gt; Unifont 15.1.01 is now available.
&lt;br /&gt;
This is a major release.  This release no longer builds TrueType fonts by default, as announced over the past year.  They have been replaced with their OpenType equivalents.  TrueType fonts can still be built manually by typing &quot;make truetype&quot; in the font directory.
&lt;br /&gt;

&lt;br /&gt;
This release also includes a new Hangul Syllables Johab 6/3/1 encoding proposed by &lt;b&gt;Ho-Seok Ee.&lt;/b&gt;  New Hangul supporting software for this encoding allows formation of all double-width Hangul syllables, including those with ancient letters that are outside the Unicode Hangul Syllables range.  Details are in the ChangeLog file.
&lt;br /&gt;

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

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

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

&lt;br /&gt;
     &lt;a href=&quot;https://ftp.gnu.org/gnu/unifont/unifont-15.1.01/&quot;&gt;https://ftp.gnu.org/gnu/unifont/unifont-15.1.01/&lt;/a&gt;
&lt;br /&gt;

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

&lt;br /&gt;
     &lt;a href=&quot;ftp://ftp.gnu.org/gnu/unifont/unifont-15.1.01/&quot;&gt;ftp://ftp.gnu.org/gnu/unifont/unifont-15.1.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=&quot;https://unifoundry.com/pub/unifont/unifont-15.1.01/&quot;&gt;https://unifoundry.com/pub/unifont/unifont-15.1.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=&quot;https://unifoundry.com/pub/unifont/unifont-15.1.01/font-builds/&quot;&gt;https://unifoundry.com/pub/unifont/unifont-15.1.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=&quot;https://unifoundry.com/unifont/index.html&quot;&gt;https://unifoundry.com/unifont/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=&quot;https://unifoundry.com/unifont/unifont-utilities.html&quot;&gt;https://unifoundry.com/unifont/unifont-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=&quot;https://unifoundry.com/hangul/index.html&quot;&gt;https://unifoundry.com/hangul/index.html&lt;/a&gt;
&lt;br /&gt;

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

&lt;br /&gt;
      &lt;a href=&quot;http://unifoundry.com/hangul/hangul-generation.html&quot;&gt;http://unifoundry.com/hangul/hangul-generation.html&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Tue, 12 Sep 2023 18:48:32 +0000</pubDate>

</item> 
<item>
	<title>GNU Guix: A new Quality Assurance tool for Guix</title>
	<guid>https://guix.gnu.org/blog/2023/a-new-quality-assurance-tool-for-guix//</guid>
	<link>https://guix.gnu.org/blog/2023/a-new-quality-assurance-tool-for-guix//</link>
     <description>  &lt;p&gt;Maintaining and expanding Guix&#39;s collection of packages can be
complicated.  As a distribution with around 22,000 packages, spanning
across around 7 architectures and with support for cross-compilation,
it&#39;s quite common for problems to occur when making changes.&lt;/p&gt;&lt;p&gt;Quality Assurance (QA) is a general term to describe the approach
taken to try and ensure something meets expectations.  When applied to
software, the term testing is normally used.  While Guix is software,
and has tests, much more than those tests are needed to maintain Guix
as a distribution.&lt;/p&gt;&lt;p&gt;So what might quality relate to in the context of Guix as a
distribution?  This will differ from person to person, but these are
some common concerns:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Packages successfully building (both now, and without any
&lt;a href=&quot;https://issues.guix.gnu.org/56137&quot;&gt;&lt;em&gt;time bombs&lt;/em&gt;&lt;/a&gt; for the future)&lt;/li&gt;&lt;li&gt;The packaged software functioning correctly&lt;/li&gt;&lt;li&gt;Packages building on or for a specific architecture&lt;/li&gt;&lt;li&gt;Packages building reproducibly&lt;/li&gt;&lt;li&gt;Availability of translations for the package definitions&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt;Tooling to help with Quality Assurance&lt;/h1&gt;&lt;p&gt;There&#39;s a range of tools to help maintain Guix.  The &lt;a href=&quot;https://guix.gnu.org/en/manual/en/html_node/Invoking-guix-lint.html&quot;&gt;package
linters&lt;/a&gt;
are a set of simple tools, they cover basic things from the naming of
packages to more complicated checkers that look for security issues
for example.&lt;/p&gt;&lt;p&gt;The &lt;a href=&quot;https://guix.gnu.org/en/manual/en/html_node/Invoking-guix-weather.html&quot;&gt;&lt;code&gt;guix weather&lt;/code&gt;&lt;/a&gt;
tool looks at substitute availability information and can indicate how
many substitutes are available for the current Guix and system.  The
&lt;a href=&quot;https://guix.gnu.org/en/manual/en/html_node/Invoking-guix-challenge.html&quot;&gt;&lt;code&gt;guix challenge&lt;/code&gt;&lt;/a&gt;
tool is similar, but it highlights package reproducibility issues,
which is when the substitutes and local store items (if available)
differ.&lt;/p&gt;&lt;p&gt;For translations, &lt;a href=&quot;https://guix.gnu.org/manual/en/html_node/Translating-Guix.html&quot;&gt;Guix uses
Weblate&lt;/a&gt;
which can provide information on how many translations are available.&lt;/p&gt;&lt;h1&gt;The QA front-page&lt;/h1&gt;&lt;p&gt;Then there&#39;s the relatively new &lt;a href=&quot;https://qa.guix.gnu.org/&quot;&gt;Quality Assurance (QA)
front-page&lt;/a&gt;, the aim of which is to bring
together some of the existing Quality Assurance related information,
as well as new being a good place to do additional QA tasks.&lt;/p&gt;&lt;p&gt;The QA front-page
&lt;a href=&quot;https://lists.gnu.org/archive/html/guix-devel/2022-09/msg00054.html&quot;&gt;started&lt;/a&gt;
as a service to coordinate automated testing for patches. When a patch
or patch series is submitted to guix-patches@gnu.org, it is
automatically applied to create a branch; then once the information is
available from the &lt;a href=&quot;https://data.qa.guix.gnu.org/&quot;&gt;Data Service&lt;/a&gt; about
this branch, the QA front-page web interface lets you view which
packages were modified and submits builds for these changes to the
&lt;a href=&quot;https://guix.gnu.org/en/blog/2021/building-derivations-how-complicated-can-it-be/&quot;&gt;Build Coordinator&lt;/a&gt;
behind &lt;a href=&quot;https://guix.gnu.org/en/blog/2021/substitutes-now-also-available-from-bordeauxguixgnuorg/&quot;&gt;bordeaux.guix.gnu.org&lt;/a&gt;
to provide build information about the modified packages.&lt;/p&gt;&lt;p&gt;&lt;img alt=&quot;QA issue page&quot; src=&quot;https://guix.gnu.org/static/blog/img/qa-issue.png&quot; /&gt;&lt;/p&gt;&lt;p&gt;A very similar process applies for branches other than the master
branch, the QA front-page queries
&lt;a href=&quot;https://issues.guix.gnu.org/&quot;&gt;issues.guix.gnu.org&lt;/a&gt; to find out which
branch is going to be merged next, then follows the same process for
patches.&lt;/p&gt;&lt;p&gt;For both patches and branches the QA front-page displays information
about the effects of the changes.  When this information is available,
it can assist with reviewing the changes and help get patches merged
quicker. This is a work in progress though, and there&#39;s much more that
the QA front-page should be able to do as providing clearer
descriptions of the changes or any other problems that should be
addressed.
&lt;img alt=&quot;QA package changes page&quot; src=&quot;https://guix.gnu.org/static/blog/img/qa-package-changes.png&quot; /&gt;&lt;/p&gt;&lt;h1&gt;How to get involved?&lt;/h1&gt;&lt;p&gt;There&#39;s plenty of ways to get involved or contribute to the QA
front-page.&lt;/p&gt;&lt;p&gt;If you submit patches to Guix, the QA front-page will attempt to apply
the patches and show what&#39;s changed. You can click through from
issues.guix.gnu.org to &lt;a href=&quot;https://qa.guix.gnu.org/&quot;&gt;qa.guix.gnu.org&lt;/a&gt; via
the QA badge by the status of the issue.&lt;/p&gt;&lt;p&gt;From the QA front-page, you can also view the list of branches which
includes the requests for merging if they exist.  Similar to the patch
series, for the branch the QA front-page can display information about
the package changes and substitute availability.&lt;/p&gt;&lt;p&gt;There&#39;s also plenty of ways to contribute to the QA front-page and
connected tools.  You can find some ideas and information on how to
run the service in the &lt;a href=&quot;https://qa.guix.gnu.org/README&quot;&gt;README&lt;/a&gt; and if
you have any questions or patches, please email &lt;code&gt;guix-devel@gnu.org&lt;/code&gt;.&lt;/p&gt;&lt;h1&gt;Acknowledgments&lt;/h1&gt;&lt;p&gt;Thanks to Simon Tournier and Ludovic Courtès for providing feedback on
an earlier draft of this post.&lt;/p&gt;&lt;h4&gt;About GNU Guix&lt;/h4&gt;&lt;p&gt;&lt;a href=&quot;https://guix.gnu.org&quot;&gt;GNU Guix&lt;/a&gt; is a transactional package manager
and an advanced distribution of the GNU system that &lt;a href=&quot;https://www.gnu.org/distros/free-system-distribution-guidelines.html&quot;&gt;respects user
freedom&lt;/a&gt;.
Guix can be used on top of any system running the Hurd or the Linux
kernel, or it can be used as a standalone operating system
distribution for i686, x86_64, ARMv7, AArch64 and POWER9 machines.&lt;/p&gt;&lt;p&gt;In addition to standard package management features, Guix supports
transactional upgrades and roll-backs, unprivileged package
management, per-user profiles, and garbage collection.  When used as a
standalone GNU/Linux distribution, Guix offers a declarative,
stateless approach to operating system configuration management.  Guix
is highly customizable and hackable through
&lt;a href=&quot;https://www.gnu.org/software/guile&quot;&gt;Guile&lt;/a&gt; programming interfaces and
extensions to the &lt;a href=&quot;http://schemers.org&quot;&gt;Scheme&lt;/a&gt; language.&lt;/p&gt; </description> 
	<pubDate>Tue, 12 Sep 2023 14:30:00 +0000</pubDate>

</item> 
<item>
	<title>FSF News: FSF job opportunity: Operations assistant</title>
	<guid>http://www.fsf.org/news/fsf-job-opportunity-operations-assistant-3</guid>
	<link>http://www.fsf.org/news/fsf-job-opportunity-operations-assistant-3</link>
     <description>  This position is no longer open. </description> 
	<pubDate>Mon, 11 Sep 2023 14:45:00 +0000</pubDate>

</item> 
<item>
	<title>gnuboot @ Savannah: Testers needed for GNU Boot 0.1 RC1</title>
	<guid>https://savannah.gnu.org/news/?id=10509</guid>
	<link>https://savannah.gnu.org/news/?id=10509</link>
     <description>  &lt;p&gt;Hi,
&lt;br /&gt;

&lt;br /&gt;
GNU Boot has published its first release candidate, and we need help
&lt;br /&gt;
for testing, at first from people who are able to recover from
&lt;br /&gt;
computers that don&#39;t boot anymore.
&lt;br /&gt;

&lt;br /&gt;
This is because, while we have very minimal changes on top of the code
&lt;br /&gt;
used by the last Libreboot release that didn&#39;t contain nonfree
&lt;br /&gt;
software, we didn&#39;t test all the images ourselves yet, so there is still
&lt;br /&gt;
risks of ending up with computers that don&#39;t boot anymore.
&lt;br /&gt;

&lt;br /&gt;
If the code works fine, we will most likely be able to release it as-is
&lt;br /&gt;
but we (the current maintainers) still have a lot of work to do before
&lt;br /&gt;
the release. 
&lt;br /&gt;

&lt;br /&gt;
For instance we still need to integrate the code from the website, find
&lt;br /&gt;
good ways to deploy it, make sure that the installation documentation
&lt;br /&gt;
works (for instance by asking for help from testers and fixing it), etc.
&lt;br /&gt;

&lt;br /&gt;
As for accepting patches, we&#39;re not ready yet to do that yet, but we
&lt;br /&gt;
plan to have that done for the first release, or before that depending
&lt;br /&gt;
on how things work.
&lt;br /&gt;

&lt;br /&gt;
For reporting what images work, you can reply to this mail (or open a
&lt;br /&gt;
bug report).
&lt;br /&gt;

&lt;br /&gt;
The GNU Boot maintainers.&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Fri, 08 Sep 2023 21:09:59 +0000</pubDate>

</item> 
<item>
	<title>Simon Josefsson: Trisquel on ppc64el: Talos II</title>
	<guid>https://blog.josefsson.org/?p=1847</guid>
	<link>https://blog.josefsson.org/2023/09/01/trisquel-on-ppc64el-talos-ii/</link>
     <description>  &lt;p&gt;The &lt;a href=&quot;https://trisquel.info/en/trisquel-110-aramo-release-announcement&quot;&gt;release notes for Trisquel 11.0 “Aramo”&lt;/a&gt; mention support for POWER and ARM architectures, however the &lt;a href=&quot;https://trisquel.info/en/download&quot;&gt;download area&lt;/a&gt; only contains links for x86, and &lt;a href=&quot;https://trisquel.info/en/forum/trisquel-download-ppcarm&quot;&gt;forum posts&lt;/a&gt; suggest there is a lack of instructions how to run Trisquel on non-x86.&lt;/p&gt;



&lt;p&gt;Since the release of Trisquel 11 I have been busy migrating x86 machines from &lt;a href=&quot;https://www.debian.org/&quot;&gt;Debian&lt;/a&gt; to Trisquel. One would think that I would be finished after this time period, but re-installing and migrating machines is really time consuming, especially if you allow yourself to be distracted every time you notice something that Really Ought to be improved. Rabbit holes all the way down. One of my production machines is running &lt;a href=&quot;https://www.debian.org/releases/bullseye/&quot;&gt;Debian 11 “bullseye”&lt;/a&gt; on a &lt;a href=&quot;https://www.raptorcs.com/content/TL1MB1/intro.html&quot;&gt;Talos II Lite&lt;/a&gt; machine from &lt;a href=&quot;https://www.raptorcs.com/&quot;&gt;Raptor Computing Systems&lt;/a&gt;, and migrating the virtual machines running on that host (including the VM that serves this blog) to a x86 machine running Trisquel felt unsatisfying to me. I want to migrate my computing towards hardware that harmonize with &lt;a href=&quot;https://ryf.fsf.org/&quot;&gt;FSF’s Respects Your Freedom&lt;/a&gt; and not away from it. Here I had to chose between using the non-free software present in newer Debian or the non-free software implied by most x86 systems: not an easy chose. So I have ignored the dilemma for some time. After all, the machine was running Debian 11 “bullseye”, which was released before Debian started to require use of non-free software. With the end-of-life date for bullseye approaching, it seems that this isn’t a sustainable choice.&lt;/p&gt;



&lt;p&gt;There is a &lt;a href=&quot;https://gitlab.trisquel.org/trisquel/makeiso/-/issues/14&quot;&gt;report open about providing ppc64el ISOs&lt;/a&gt; that was created by Jason Self shortly after the release, but for many months nothing happened. About a month ago, Luis GuzmÃ¡n mentioned an &lt;a href=&quot;https://gitlab.trisquel.org/trisquel/makeiso/-/issues/14#note_9712&quot;&gt;initial ISO build&lt;/a&gt; and I started testing it. The setup has worked well for a month, and with this post I want to contribute instructions how to get it up and running since this is still missing.&lt;/p&gt;



&lt;p&gt;The setup of my soon-to-be new production machine:&lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;Talos II Lite&lt;/li&gt;



&lt;li&gt;POWER9 18-core v2 CPU&lt;/li&gt;



&lt;li&gt;Inter-Tech &lt;a href=&quot;https://www.inter-tech.de/productdetails-142/4U-4410_EN.html&quot;&gt;4U-4410&lt;/a&gt; rack case with ASPOWER power supply&lt;/li&gt;



&lt;li&gt;8x32GB DDR4-2666 ECC RDIMM&lt;/li&gt;



&lt;li&gt;HighPoint SSD7505 (the Rocket 1504 or 1204 would be a more cost-effective choice, but I re-used a component I had laying around)&lt;/li&gt;



&lt;li&gt;PERC H700 aka LSI MegaRAID 2108 SAS/SATA (also found laying around)&lt;/li&gt;



&lt;li&gt;2x1TB NVMe&lt;/li&gt;



&lt;li&gt;3x18TB disks&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;According to the &lt;a href=&quot;https://gitlab.trisquel.org/trisquel/makeiso/-/issues/14#note_9774&quot;&gt;notes in issue 14&lt;/a&gt; the ISO image is available at &lt;a href=&quot;https://builds.trisquel.org/debian-installer-images/&quot;&gt;https://builds.trisquel.org/debian-installer-images/&lt;/a&gt; and the following commands download, integrity check and write it to a USB stick:&lt;/p&gt;



&lt;pre class=&quot;wp-block-preformatted&quot;&gt;&lt;code&gt;wget -q https://builds.trisquel.org/debian-installer-images/debian-installer-images_20210731+deb11u8+11.0trisquel14_ppc64el.tar.gz&lt;/code&gt;
tar xfa debian-installer-images_20210731+deb11u8+11.0trisquel14_ppc64el.tar.gz ./installer-ppc64el/20210731+deb11u8+11/images/netboot/mini.iso
echo &#39;6df8f45fbc0e7a5fadf039e9de7fa2dc57a4d466e95d65f2eabeec80577631b7  ./installer-ppc64el/20210731+deb11u8+11/images/netboot/mini.iso&#39; | sha256sum -c
sudo wipefs -a /dev/sdX
sudo dd if=./installer-ppc64el/20210731+deb11u8+11/images/netboot/mini.iso of=/dev/sdX conv=sync status=progress&lt;/pre&gt;



&lt;p&gt;Sadly, no hash checksums or OpenPGP signatures are published.&lt;/p&gt;



&lt;p&gt;Power off your device, insert the USB stick, and power it up, and you see a Petitboot menu offering to boot from the USB stick. For some reason, the &lt;code&gt;&quot;Expert Install&quot;&lt;/code&gt; was the default in the menu, and instead I select &lt;code&gt;&quot;Default Install&quot;&lt;/code&gt; for the regular experience. For this post, I will ignore BMC/IPMI, as interacting with it is not necessary. Make sure to not connect the BMC/IPMI ethernet port unless you are willing to enter that dungeon. The VGA console works fine with a normal USB keyboard, and you can chose to use only the second &lt;code&gt;enP4p1s0f1&lt;/code&gt; network card in the network card selection menu.&lt;/p&gt;



&lt;p&gt;If you are familiar with Debian netinst ISO’s, the installation is straight-forward. I complicate the setup by partitioning two RAID1 partitions on the two NVMe sticks, one RAID1 for a 75GB ext4 root filesystem (discard,noatime) and one RAID1 for a 900GB LVM volume group for virtual machines, and two 20GB swap partitions on each of the NVMe sticks (to silence a warning about lack of swap, I’m not sure swap is still a good idea?). The 3x18TB disks &lt;a href=&quot;https://unix.stackexchange.com/questions/583527/dm-integrity-standalone-mapper-device-lost-after-reboot/&quot;&gt;use DM-integrity&lt;/a&gt; with RAID1 however the installer does not support DM-integrity so I had to create it after the installation.&lt;/p&gt;



&lt;p&gt;There are two additional matters worth mentioning:&lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;Selecting the apt mirror does not have the list of well-known Trisquel mirrors which the x86 installer offers. Instead I have to input the archive mirror manually, and fortunately the &lt;code&gt;archive.trisquel.org&lt;/code&gt; hostname and path values are available as defaults, so I just press enter and fix this after the installation has finished.  You may want to have the hostname/path of your local mirror handy, to speed things up.&lt;/li&gt;



&lt;li&gt;The installer asks me which kernel to use, which the x86 installer does not do. I believe older Trisquel/Ubuntu installers asked this question, but that it was gone in aramo on x86. I select the default “&lt;code&gt;linux-image-generic&lt;/code&gt;” which gives me a predictable 5.15 Linux-libre kernel, although you may want to chose “&lt;code&gt;linux-image-generic-hwe-11.0&lt;/code&gt;” for a more recent 6.2 Linux-libre kernel. Maybe this is intentional debinst-behaviour for non-x86 platforms?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;I have re-installed the machine a couple of times, and have now finished installing the production setup. I haven’t ran into any serious issues, and the system has been stable. Time to wrap up, and celebrate that I now run an operating system aligned with the &lt;a href=&quot;https://www.gnu.org/distros/free-system-distribution-guidelines.html&quot;&gt;Free System Distribution Guidelines&lt;/a&gt; on hardware that aligns with &lt;a href=&quot;https://ryf.fsf.org/&quot;&gt;Respects Your Freedom&lt;/a&gt; — Happy Hacking indeed!&lt;/p&gt; </description> 
	<pubDate>Fri, 01 Sep 2023 15:37:18 +0000</pubDate>

</item> 
<item>
	<title>coreutils @ Savannah: coreutils-9.4 released [stable]</title>
	<guid>https://savannah.gnu.org/news/?id=10505</guid>
	<link>https://savannah.gnu.org/news/?id=10505</link>
     <description>  &lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;blockquote class=&quot;verbatim&quot;&gt;&lt;p&gt; This is to announce coreutils-9.4, a stable release.&lt;br /&gt;
This is a stabilization release coming about 19 weeks after the 9.3 release.&lt;br /&gt;
See the NEWS below for a summary of changes.&lt;br /&gt;
&lt;br /&gt;
There have been 162 commits by 10 people in the 19 weeks since 9.3.&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;
  Andreas Schwab (1)      Jim Meyering (1)&lt;br /&gt;
  Bernhard Voelker (3)    Paul Eggert (60)&lt;br /&gt;
  Bruno Haible (11)       Pádraig Brady (80)&lt;br /&gt;
  Dragan Simic (3)        Sylvestre Ledru (2)&lt;br /&gt;
  Jaroslav Skarvada (1)   Ville Skyttä (1)&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;
    http://gnu.org/s/coreutils/&lt;br /&gt;
&lt;br /&gt;
For a summary of changes and contributors, see:&lt;br /&gt;
  http://git.sv.gnu.org/gitweb/?p=coreutils.git;a=shortlog;h=v9.4&lt;br /&gt;
or run this command from a git-cloned coreutils directory:&lt;br /&gt;
  git shortlog v9.3..v9.4&lt;br /&gt;
&lt;br /&gt;
Here are the compressed sources:&lt;br /&gt;
  https://ftp.gnu.org/gnu/coreutils/coreutils-9.4.tar.gz   (15MB)&lt;br /&gt;
  https://ftp.gnu.org/gnu/coreutils/coreutils-9.4.tar.xz   (5.8MB)&lt;br /&gt;
&lt;br /&gt;
Here are the GPG detached signatures:&lt;br /&gt;
  https://ftp.gnu.org/gnu/coreutils/coreutils-9.4.tar.gz.sig&lt;br /&gt;
  https://ftp.gnu.org/gnu/coreutils/coreutils-9.4.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 SHA1 and SHA256 checksums:&lt;br /&gt;
&lt;br /&gt;
  7dce42b8657e333ce38971d4ee512c4313b8f633  coreutils-9.4.tar.gz&lt;br /&gt;
  X2ANkJOXOwr+JTk9m8GMRPIjJlf0yg2V6jHHAutmtzk=  coreutils-9.4.tar.gz&lt;br /&gt;
  7effa305c3f4bc0d40d79f1854515ebf5f688a18  coreutils-9.4.tar.xz&lt;br /&gt;
  6mE6TPRGEjJukXIBu7zfvTAd4h/8O1m25cB+BAsnXlI=  coreutils-9.4.tar.xz&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&#39;s cksum since 2007.&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.4.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   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                   [ unknown] Pádraig Brady &amp;lt;P@draigBrady.com&amp;gt;&lt;br /&gt;
  uid                   [ unknown] Pádraig Brady &amp;lt;pixelbeat@gnu.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If that command fails because you don&#39;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 &#39;gpg --verify&#39; 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- &#39;https://savannah.gnu.org/project/release-gpgkeys.php?group=coreutils&amp;amp;download=1&#39; | 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.4.tar.gz.sig&lt;br /&gt;
&lt;br /&gt;
This release was bootstrapped with the following tools:&lt;br /&gt;
  Autoconf 2.72c.32-cb6fb&lt;br /&gt;
  Automake 1.16.5&lt;br /&gt;
  Gnulib v0.1-6658-gbb5bb43a1e&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.4 (2023-08-29) [stable]&lt;br /&gt;
&lt;br /&gt;
** Bug fixes&lt;br /&gt;
&lt;br /&gt;
  On GNU/Linux s390x and alpha, programs like &#39;cp&#39; and &#39;ls&#39; no longer&lt;br /&gt;
  fail on files with inode numbers that do not fit into 32 bits.&lt;br /&gt;
  [This bug was present in &quot;the beginning&quot;.]&lt;br /&gt;
&lt;br /&gt;
  &#39;b2sum --check&#39; will no longer read unallocated memory when&lt;br /&gt;
  presented with malformed checksum lines.&lt;br /&gt;
  [bug introduced in coreutils-9.2]&lt;br /&gt;
&lt;br /&gt;
  &#39;cp --parents&#39; again succeeds when preserving mode for absolute directories.&lt;br /&gt;
  Previously it would have failed with a &quot;No such file or directory&quot; error.&lt;br /&gt;
  [bug introduced in coreutils-9.1]&lt;br /&gt;
&lt;br /&gt;
  &#39;cp --sparse=never&#39; will avoid copy-on-write (reflinking) and copy offloading,&lt;br /&gt;
  to ensure no holes present in the destination copy.&lt;br /&gt;
  [bug introduced in coreutils-9.0]&lt;br /&gt;
&lt;br /&gt;
  cksum again diagnoses read errors in its default CRC32 mode.&lt;br /&gt;
  [bug introduced in coreutils-9.0]&lt;br /&gt;
&lt;br /&gt;
  &#39;cksum --check&#39; now ensures filenames with a leading backslash character&lt;br /&gt;
  are escaped appropriately in the status output.&lt;br /&gt;
  This also applies to the standalone checksumming utilities.&lt;br /&gt;
  [bug introduced in coreutils-8.25]&lt;br /&gt;
&lt;br /&gt;
  dd again supports more than two multipliers for numbers.&lt;br /&gt;
  Previously numbers of the form &#39;1024x1024x32&#39; gave &quot;invalid number&quot; errors.&lt;br /&gt;
  [bug introduced in coreutils-9.1]&lt;br /&gt;
&lt;br /&gt;
  factor, numfmt, and tsort now diagnose read errors on the input.&lt;br /&gt;
  [This bug was present in &quot;the beginning&quot;.]&lt;br /&gt;
&lt;br /&gt;
  &#39;install --strip&#39; now supports installing to files with a leading hyphen.&lt;br /&gt;
  Previously such file names would have caused the strip process to fail.&lt;br /&gt;
  [This bug was present in &quot;the beginning&quot;.]&lt;br /&gt;
&lt;br /&gt;
  ls now shows symlinks specified on the command line that can&#39;t be traversed.&lt;br /&gt;
  Previously a &quot;Too many levels of symbolic links&quot; diagnostic was given.&lt;br /&gt;
  [This bug was present in &quot;the beginning&quot;.]&lt;br /&gt;
&lt;br /&gt;
  pinky, uptime, users, and who no longer misbehave on 32-bit GNU/Linux&lt;br /&gt;
  platforms like x86 and ARM where time_t was historically 32 bits.&lt;br /&gt;
  Also see the new --enable-systemd option mentioned below.&lt;br /&gt;
  [bug introduced in coreutils-9.0]&lt;br /&gt;
&lt;br /&gt;
  &#39;pr --length=1 --double-space&#39; no longer enters an infinite loop.&lt;br /&gt;
  [This bug was present in &quot;the beginning&quot;.]&lt;br /&gt;
&lt;br /&gt;
  shred again operates on Solaris when built for 64 bits.&lt;br /&gt;
  Previously it would have exited with a &quot;getrandom: Invalid argument&quot; error.&lt;br /&gt;
  [bug introduced in coreutils-9.0]&lt;br /&gt;
&lt;br /&gt;
  tac now handles short reads on its input.  Previously it may have exited&lt;br /&gt;
  erroneously, especially with large input files with no separators.&lt;br /&gt;
  [This bug was present in &quot;the beginning&quot;.]&lt;br /&gt;
&lt;br /&gt;
  &#39;uptime&#39; no longer incorrectly prints &quot;0 users&quot; on OpenBSD,&lt;br /&gt;
  and is being built again on FreeBSD and Haiku.&lt;br /&gt;
  [bugs introduced in coreutils-9.2]&lt;br /&gt;
&lt;br /&gt;
  &#39;wc -l&#39; and &#39;cksum&#39; no longer crash with an &quot;Illegal instruction&quot; error&lt;br /&gt;
  on x86 Linux kernels that disable XSAVE YMM.  This was seen on Xen VMs.&lt;br /&gt;
  [bug introduced in coreutils-9.0]&lt;br /&gt;
&lt;br /&gt;
** Changes in behavior&lt;br /&gt;
&lt;br /&gt;
  &#39;cp -v&#39; and &#39;mv -v&#39; will no longer output a message for each file skipped&lt;br /&gt;
  due to -i, or -u.  Instead they only output this information with --debug.&lt;br /&gt;
  I.e., &#39;cp -u -v&#39; etc. will have the same verbosity as before coreutils-9.3.&lt;br /&gt;
&lt;br /&gt;
  &#39;cksum -b&#39; no longer prints base64-encoded checksums.  Rather that&lt;br /&gt;
  short option is reserved to better support emulation of the standalone&lt;br /&gt;
  checksum utilities with cksum.&lt;br /&gt;
&lt;br /&gt;
  &#39;mv dir x&#39; now complains differently if x/dir is a nonempty directory.&lt;br /&gt;
  Previously it said &quot;mv: cannot move &#39;dir&#39; to &#39;x/dir&#39;: Directory not empty&quot;,&lt;br /&gt;
  where it was unclear whether &#39;dir&#39; or &#39;x/dir&#39; was the problem.&lt;br /&gt;
  Now it says &quot;mv: cannot overwrite &#39;x/dir&#39;: Directory not empty&quot;.&lt;br /&gt;
  Similarly for other renames where the destination must be the problem.&lt;br /&gt;
  [problem introduced in coreutils-6.0]&lt;br /&gt;
&lt;br /&gt;
** Improvements&lt;br /&gt;
&lt;br /&gt;
  cp, mv, and install now avoid copy_file_range on linux kernels before 5.3&lt;br /&gt;
  irrespective of which kernel version coreutils is built against,&lt;br /&gt;
  reinstating that behavior from coreutils-9.0.&lt;br /&gt;
&lt;br /&gt;
  comm, cut, join, od, and uniq will now exit immediately upon receiving a&lt;br /&gt;
  write error, which is significant when reading large / unbounded inputs.&lt;br /&gt;
&lt;br /&gt;
  split now uses more tuned access patterns for its potentially large input.&lt;br /&gt;
  This was seen to improve throughput by 5% when reading from SSD.&lt;br /&gt;
&lt;br /&gt;
  split now supports a configurable $TMPDIR for handling any temporary files.&lt;br /&gt;
&lt;br /&gt;
  tac now falls back to &#39;/tmp&#39; if a configured $TMPDIR is unavailable.&lt;br /&gt;
&lt;br /&gt;
  &#39;who -a&#39; now displays the boot time on Alpine Linux, OpenBSD,&lt;br /&gt;
  Cygwin, Haiku, and some Android distributions&lt;br /&gt;
&lt;br /&gt;
  &#39;uptime&#39; now succeeds on some Android distributions, and now counts&lt;br /&gt;
  VM saved/sleep time on GNU (Linux, Hurd, kFreeBSD), NetBSD, OpenBSD,&lt;br /&gt;
  Minix, and Cygwin.&lt;br /&gt;
&lt;br /&gt;
  On GNU/Linux platforms where utmp-format files have 32-bit timestamps,&lt;br /&gt;
  pinky, uptime, and who can now work for times after the year 2038,&lt;br /&gt;
  so long as systemd is installed, you configure with a new, experimental&lt;br /&gt;
  option --enable-systemd, and you use the programs without file arguments.&lt;br /&gt;
  (For example, with systemd &#39;who /var/log/wtmp&#39; does not work because&lt;br /&gt;
  systemd does not support the equivalent of /var/log/wtmp.)&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Tue, 29 Aug 2023 15:16:59 +0000</pubDate>

</item> 
<item>
	<title>GNUnet News: GSoC Work Product: GNUnet over QUIC</title>
	<guid>https://gnunet.org/en/news/2023-08-GSoC-QUIC.html</guid>
	<link>https://gnunet.org/en/news/2023-08-GSoC-QUIC.html</link>
     <description>  &lt;article id=&quot;newspost-content&quot;&gt;
 
  &lt;h1&gt;
   GSoC Work Product: GNUnet over QUIC
  &lt;/h1&gt;
  &lt;p&gt;
   Hi, my name is Marshall and throughout the summer of 2023 I worked on developing a new communicator for the GNUnet transport service. I learned a lot about GNUnet through my development experience. Here are some details about the journey!
  &lt;/p&gt;
  &lt;h2&gt;
   Goals of the Project.
  &lt;/h2&gt;
  &lt;p&gt;
   The goal of this project was to develop a new transport, QUIC, for the
   &lt;a href=&quot;https://docs.gnunet.org/developers/transport-ng/transport-ng.html&quot;&gt;
    Transport Next Generation (TNG) service
   &lt;/a&gt;
   .  TNG is a successor to the previous transport plugins and will be running in the fall 2023 GNUnet release. At the time of writing, GNUnet currently supports transports over TCP, UDP, and UNIX sockets. 
  I chose to implement a QUIC transport communicator due to the rising popularity and speed of this protocol. Because of this popularity, QUIC will be a great transport protocol for GNUnet traffic to sit on top of. QUIC is intended to be a faster alternative to TCP and tries to address some issues that TLS has.
  &lt;/p&gt;
  &lt;h2&gt;
   What I completed.
  &lt;/h2&gt;
  &lt;p&gt;
   One of the first steps was deciding on a library that can process QUIC packets and would be available to users running different operating systems.
We chose to go with
   &lt;a href=&quot;https://github.com/cloudflare/quiche&quot;&gt;
    Cloudflare&#39;s Quiche library
   &lt;/a&gt;
   because the C API seemed simpler than other available libraries. Installing cloudflare-quiche via the Homebrew package manager (MacOS) did not actually install the libraries properly for linking with other C programs so I made a pull request in the Homebrew repository and
   &lt;a href=&quot;https://github.com/Homebrew/homebrew-core/commit/227fa616059fdb2157628535b85a801bbb5613f5&quot;&gt;
    fixed the formula
   &lt;/a&gt;
   .
After this, I worked on handling the receiving functionality of the communicator. This involved reading from the socket then processing the QUIC packets using the Quiche library. Then I implemented the ability to send messages in a similar manner. One of the last steps involved connecting everything together with the transport service so that the communicator can receive information about peers and relay messages.
Once I finished these tasks, the QUIC communicator got merged upstream and is currently an experimental feature. This is due to the packaging situation with Quiche as it is difficult for some users to install the library, and there still may be bugs lingering in the QUIC communicator. More testing and refinement is needed to offer a truly robust and reliable communicator.

Link to source code:
   &lt;a href=&quot;https://git.gnunet.org/gnunet.git/tree/src/transport/gnunet-communicator-quic.c&quot;&gt;
    QUIC communicator
   &lt;/a&gt;
   .
  &lt;/p&gt;
  &lt;h2&gt;
   The current state.
  &lt;/h2&gt;
  &lt;p&gt;
   The QUIC communicator currently functions and passes basic communicator tests. That being said, there are some latency issues that need to be addressed. Since the communicator suite is designed to run alongside the new TNG service, it is currently not usable since TNG is still under development (as mentioned previously). Mentioned below are some other things that have yet to be implemented in the QUIC communicator, but will be fixed in the future.
  &lt;/p&gt;
  &lt;h2&gt;
   Future Work.
  &lt;/h2&gt;
  &lt;p&gt;
   We still need to develop a more permanent solution to the certificate generation so that the Quiche API functions properly. This
   &lt;a href=&quot;https://git.gnunet.org/gnunet.git/tree/src/transport/gnunet-transport-certificate-creation.in&quot;&gt;
    certificate generation
   &lt;/a&gt;
   has been done in previous implementations (for example the HTTPS plugin). Currently, we are using static, example certificates. Adding timers to each QUIC connection so that a timeout will trigger a connection to close also needs to be implemented. Finally, we should look into lowering the latency by finding points where the communicator is too slow and optimizing it.
  &lt;/p&gt;
  &lt;h2&gt;
   Challenges I Encountered.
  &lt;/h2&gt;
  &lt;p&gt;
   One of the challenges was reverse engineering the Quiche C API because it has such limited documentation. I learned how to make use of the API by looking at the very simple example client and server examples that are provided in the Quiche repository. There is documentation for the Rust API which seems to operate pretty similarly, so this was helpful too at times. I overcame this challenge with the help and guidance of my mentor Martin Schanzenbach.
  &lt;/p&gt;
  &lt;h2&gt;
   Final notes.
  &lt;/h2&gt;
  Overall, my experience with GNUnet was fantastic. My mentors were friendly and consistently available when I needed help, and I thank them for that. I&#39;m thankful for the GNUnet community for being welcoming and understanding toward new open source developers like myself. I had a lot of fun learning how GNUnet works while developing my project. I am looking forward to contributing to GNUnet in the future!
 
&lt;/article&gt; </description> 
	<pubDate>Sat, 26 Aug 2023 22:00:00 +0000</pubDate>

</item> 
<item>
	<title>parallel @ Savannah: GNU Parallel 20230822 (&#39;Chandrayaan&#39;) released [stable]</title>
	<guid>https://savannah.gnu.org/news/?id=10504</guid>
	<link>https://savannah.gnu.org/news/?id=10504</link>
     <description>  &lt;p&gt;GNU Parallel 20230822 (&#39;Chandrayaan&#39;) 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 your friend. Unleash your cores! #GNU
&lt;br /&gt;
    -- Blake L @BlakeDL@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;News about GNU Parallel:
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GNU Parallel, where have you been all my life? &lt;a href=&quot;https://alexplescan.com/posts/2023/08/20/gnu-parallel/&quot;&gt;https://alexplescan.com/posts/2023/08/20/gnu-parallel/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Parallel (multithreaded) music download from Youtube &lt;a href=&quot;https://hrna.moe/?p=parallel-multithread-music-download&quot;&gt;https://hrna.moe/?p=parallel-multithread-music-download&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&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 &#39;*.jpg&#39; |
&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=&quot;http://www.gnu.org/s/parallel/&quot;&gt;http://www.gnu.org/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=&quot;http://pi.dk/3&quot;&gt;http://pi.dk/3&lt;/a&gt; ) &amp;gt; install.sh
&lt;br /&gt;
    $ sha1sum install.sh | grep 883c667e01eed62f975ad28b6d50e22a
&lt;br /&gt;
    12345678 883c667e 01eed62f 975ad28b 6d50e22a
&lt;br /&gt;
    $ md5sum install.sh | grep cc21b4c943fd03e93ae1ae49e28573c0
&lt;br /&gt;
    cc21b4c9 43fd03e9 3ae1ae49 e28573c0
&lt;br /&gt;
    $ sha512sum install.sh | grep ec113b49a54e705f86d51e784ebced224fdff3f52
&lt;br /&gt;
    79945d9d 250b42a4 2067bb00 99da012e c113b49a 54e705f8 6d51e784 ebced224
&lt;br /&gt;
    fdff3f52 ca588d64 e75f6033 61bd543f d631f592 2f87ceb2 ab034149 6df84a35
&lt;br /&gt;
    $ bash install.sh
&lt;br /&gt;

&lt;br /&gt;
Watch the intro video on &lt;a href=&quot;http://www.youtube.com/playlist?list=PL284C9FF2488BC6D1&quot;&gt;http://www.youtube.com/playlist?list=PL284C9FF2488BC6D1&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=&quot;https://doi.org/10.5281/zenodo.1146014&quot;&gt;https://doi.org/10.5281/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=&quot;https://gnuparallel.threadless.com/designs/gnu-parallel&quot;&gt;https://gnuparallel.threadless.com/designs/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=&quot;https://my.fsf.org/donate/&quot;&gt;https://my.fsf.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&#39; 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&#39;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>Thu, 24 Aug 2023 04:31:43 +0000</pubDate>

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

&lt;br /&gt;
This is a bugfix release in the 3.x series.
&lt;br /&gt;

&lt;br /&gt;
See the file NEWS in the distribution tarball for a list of issues
&lt;br /&gt;
fixed in this release.
&lt;br /&gt;

&lt;br /&gt;
The tarball poke-3.3.tar.gz is now available at
&lt;br /&gt;
&lt;a href=&quot;https://ftp.gnu.org/gnu/poke/poke-3.3.tar.gz&quot;&gt;https://ftp.gnu.org/gnu/poke/poke-3.3.tar.gz&lt;/a&gt;.
&lt;br /&gt;

&lt;br /&gt;
  GNU poke (&lt;a href=&quot;http://www.jemarch.net/poke&quot;&gt;http://www.jemarch.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;
Thanks to the people who contributed with code and/or documentation to
&lt;br /&gt;
this release.
&lt;br /&gt;

&lt;br /&gt;
Happy poking!
&lt;br /&gt;

&lt;br /&gt;
--
&lt;br /&gt;
Jose E. Marchesi
&lt;br /&gt;
Frankfurt am Main
&lt;br /&gt;
20 August 2023&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Sun, 20 Aug 2023 15:41:41 +0000</pubDate>

</item> 
<item>
	<title>gzip @ Savannah: gzip-1.13 released [stable]</title>
	<guid>https://savannah.gnu.org/news/?id=10501</guid>
	<link>https://savannah.gnu.org/news/?id=10501</link>
     <description>  &lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;blockquote class=&quot;verbatim&quot;&gt;&lt;p&gt; This is to announce gzip-1.13, a stable release.&lt;br /&gt;
Thanks to Paul and Bruno for contributing.&lt;br /&gt;
&lt;br /&gt;
There have been 50 commits by 3 people in the 71 weeks since 1.12.&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 (4)&lt;br /&gt;
  Jim Meyering (15)&lt;br /&gt;
  Paul Eggert (31)&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;
    http://gnu.org/s/gzip/&lt;br /&gt;
&lt;br /&gt;
For a summary of changes and contributors, see:&lt;br /&gt;
  http://git.sv.gnu.org/gitweb/?p=gzip.git;a=shortlog;h=v1.13&lt;br /&gt;
or run this command from a git-cloned gzip directory:&lt;br /&gt;
  git shortlog v1.12..v1.13&lt;br /&gt;
&lt;br /&gt;
Here are the compressed sources:&lt;br /&gt;
  https://ftp.gnu.org/gnu/gzip/gzip-1.13.tar.gz   (1.3MB)&lt;br /&gt;
  https://ftp.gnu.org/gnu/gzip/gzip-1.13.tar.xz   (820KB)&lt;br /&gt;
&lt;br /&gt;
Here are the GPG detached signatures:&lt;br /&gt;
  https://ftp.gnu.org/gnu/gzip/gzip-1.13.tar.gz.sig&lt;br /&gt;
  https://ftp.gnu.org/gnu/gzip/gzip-1.13.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 SHA1 and SHA256 checksums:&lt;br /&gt;
&lt;br /&gt;
  9cc4f2220c8028823433e9d869dc07610aefefb5  gzip-1.13.tar.gz&lt;br /&gt;
  IPyBiu666Hzb8gnTUUGtnTzzErNaXmvmG/z7+e3dISo=  gzip-1.13.tar.gz&lt;br /&gt;
  a793e107a54769576adc16703f97c39ee7afdd4e  gzip-1.13.tar.xz&lt;br /&gt;
  dFTraTXbF8ZlVXbC4bD6vv04tNCTbg+H9IzQYs6RoFc=  gzip-1.13.tar.xz&lt;br /&gt;
&lt;br /&gt;
Verify the base64 SHA256 checksum with cksum -a sha256 --check&lt;br /&gt;
from GNU coreutils-9.2 or OpenBSD&#39;s cksum since 2007.&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.13.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   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                   [ unknown] Jim Meyering &amp;lt;jim@meyering.net&amp;gt;&lt;br /&gt;
  uid                   [ unknown] Jim Meyering &amp;lt;meyering@fb.com&amp;gt;&lt;br /&gt;
  uid                   [ unknown] Jim Meyering &amp;lt;meyering@gnu.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If that command fails because you don&#39;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 &#39;gpg --verify&#39; 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- &#39;https://savannah.gnu.org/project/release-gpgkeys.php?group=gzip&amp;amp;download=1&#39; | 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.13.tar.gz.sig&lt;br /&gt;
&lt;br /&gt;
This release was bootstrapped with the following tools:&lt;br /&gt;
  Autoconf 2.72c.32-cb6fb&lt;br /&gt;
  Automake 1.16i&lt;br /&gt;
  Gnulib v0.1-6631-g5651802c60&lt;br /&gt;
&lt;br /&gt;
NEWS&lt;br /&gt;
&lt;br /&gt;
* Noteworthy changes in release 1.13 (2023-08-19) [stable]&lt;br /&gt;
&lt;br /&gt;
** Changes in behavior&lt;br /&gt;
&lt;br /&gt;
  zless now diagnoses gzip failures, if using less 623 or later.&lt;br /&gt;
&lt;br /&gt;
  When SIGPIPE is ignored, gzip now exits with status 2 (warning)&lt;br /&gt;
  instead of status 1 (error) when writing to a broken pipe.  This is&lt;br /&gt;
  more useful with programs like &#39;less&#39; that treat gzip exit status 2&lt;br /&gt;
  as a non-failure.&lt;br /&gt;
&lt;br /&gt;
** Bug fixes&lt;br /&gt;
&lt;br /&gt;
  &#39;gzip -d&#39; no longer fails to report invalid compressed data&lt;br /&gt;
  that uses a dictionary distance outside the input window.&lt;br /&gt;
  [bug present since the beginning]&lt;br /&gt;
&lt;br /&gt;
  Port to C23, which does not allow K&amp;amp;R-style function definitions&lt;br /&gt;
  with parameters, and which does not define __alignas_is_defined.&lt;br /&gt;
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Sun, 20 Aug 2023 00:33:17 +0000</pubDate>

</item> 
<item>
	<title>screen @ Savannah: GNU Screen v.4.9.1</title>
	<guid>https://savannah.gnu.org/news/?id=10500</guid>
	<link>https://savannah.gnu.org/news/?id=10500</link>
     <description>  &lt;p&gt;I&#39;m announcing availability of GNU Screen v.4.9.1
&lt;br /&gt;

&lt;br /&gt;
Screen is a full-screen window manager that multiplexes a physical terminal between several processes, typically interactive shells.
&lt;br /&gt;

&lt;br /&gt;
This release:
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Support stop/parity bits on serial port
&lt;/li&gt;
&lt;li&gt;Add needed system headers in checks and return values for implicit function declarations
&lt;/li&gt;
&lt;li&gt;Fixes:
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;- Avoid zombies after shell exit
&lt;br /&gt;
- Missed signal sending permission check on failed query messages (CVE-2023-24626)
&lt;br /&gt;
- manpage fixes
&lt;br /&gt;
- source code fixes during cleanup
&lt;br /&gt;
- UTF-8 encoding can emit invalid UTF-8 sequences for out of range unicode values
&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;
For full list of changes see
&lt;br /&gt;
&lt;a href=&quot;https://git.savannah.gnu.org/cgit/screen.git/log/?h=v.4.9.1&quot;&gt;https://git.savannah.gnu.org/cgit/screen.git/log/?h=v.4.9.1&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Release is available for download at:
&lt;br /&gt;
&lt;a href=&quot;https://ftp.gnu.org/gnu/screen/&quot;&gt;https://ftp.gnu.org/gnu/screen/&lt;/a&gt;
&lt;br /&gt;
or your closest mirror (may have some delay)
&lt;br /&gt;
&lt;a href=&quot;https://ftpmirror.gnu.org/screen/&quot;&gt;https://ftpmirror.gnu.org/screen/&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Please report any bugs or regressions.
&lt;br /&gt;
Thanks to everyone who contributed to this release.
&lt;br /&gt;

&lt;br /&gt;
Cheers,
&lt;br /&gt;
Alex&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Thu, 17 Aug 2023 14:24:10 +0000</pubDate>

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

&lt;br /&gt;
I am very glad that we have a new member.
&lt;br /&gt;

&lt;br /&gt;
Real Name: 	Jing Luo
&lt;br /&gt;
Login Name: 	jing
&lt;br /&gt;
Id: 	#346988
&lt;br /&gt;
Email Address: 	&lt;a href=&quot;mailto:szmun.luoj@gmail.com&quot;&gt;szmun.luoj@gmail.com&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Jing Luo will show his/her passion in Free Software, and try to let more people know about GNU.
&lt;br /&gt;

&lt;br /&gt;
I wish Jing Luo a pleasant journey to a better world.
&lt;br /&gt;

&lt;br /&gt;
Let&#39;s welcome Jing Luo in this big family.
&lt;br /&gt;
wxie&lt;br /&gt;
&lt;/p&gt; </description> 
	<pubDate>Mon, 14 Aug 2023 23:31:35 +0000</pubDate>

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