Planet GNU

Aggregation of development blogs from the GNU Project

November 07, 2018

Riccardo Mottola

ArcticFox on 10.6

ArcticFox, currently in my own fork, succesfully compiles natively on MacOS 10.6 Snow Leopard and runs! 64 bit currently.
Great news for those who use older but still perfectly capable Macintoshes....

ArcticFox derives from PaleMoon 27 which in turn is FireFox derived.

I tried Facebook and even WebGL samples as this screenshot shows.



This Blog entry is written natively on my MacBook and ArcticFox.

07 November, 2018 10:52PM by Riccardo ([email protected])

FSF Events

Richard Stallman - « El software libre y tu libertad » (Bilbao, Spain)

Richard Stallman hablará sobre las metas y la filosofía del movimiento del Software Libre, y el estado y la historia del sistema operativo GNU, el cual junto con el núcleo Linux, es actualmente utilizado por decenas de millones de personas en todo el mundo.

Esta charla de Richard Stallman formará parte de LibreCon (2018-11-21–22). Será posible registrarse en efectivo el día del evento.

Lugar: "Inspiration Space," Palacio Euskalduna, Avda. Abandoibarra, 4, 48011 Bilbao, España

Por favor, rellene este formulario para que podamos contactarle sobre futuros eventos en la región de Bilbao.

07 November, 2018 05:18PM

libredwg @ Savannah

libredwg-0.6.2 released

Important bugfixes:
* Fixed several out_dxf segfaults (#39)
* Enhanced the section size limit from 2032 to 2040.
There were several DWG files with a section size of 2035
in the wild. (PR #41, Denis Pryt)
* Fixed EED realloc on decoding when end - dat->byte == 1
(PR #41, Denis Pryt)

Here are the compressed sources:
http://ftp.gnu.org/gnu/libredwg//libredwg-0.6.2.tar.gz (9.8MB)
http://ftp.gnu.org/gnu/libredwg//libredwg-0.6.2.tar.xz (3.7MB)

Here are the GPG detached signatures[*]:
http://ftp.gnu.org/gnu/libredwg//libredwg-0.6.2.tar.gz.sig
http://ftp.gnu.org/gnu/libredwg//libredwg-0.6.2.tar.xz.sig

Use a mirror for higher download bandwidth:
https://www.gnu.org/order/ftp.html

Here are more binaries:
https://github.com/LibreDWG/libredwg/releases/tag/0.6.2

Here are the SHA256 checksums:

b886962feb1a03ebbed572fde7754334654fc16a91484eef13338faad5f40b74 libredwg-0.6.2.tar.gz
b17a5bc2a4f7cc13aa2c26c890cba9954ca768643884c8740c1a6b045c07591f libredwg-0.6.2.tar.xz

[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact. First, be sure to download both the .sig file
and the corresponding tarball. Then, run a command like this:

gpg --verify libredwg-0.6.2.tar.gz.sig

If that command fails because you don't have the required public key,
then run this command to import it:

gpg --keyserver keys.gnupg.net --recv-keys B4F63339E65D6414

and rerun the 'gpg --verify' command.

07 November, 2018 10:51AM by Reini Urban

November 06, 2018

FSF Blogs

LibrePlanet Call for Sessions to close THIS FRIDAY

The LibrePlanet 2019 conference call for sessions (CfS) deadline is nearly upon us! On Friday, November 9th, 2018, 10:00 EST (14:00 UTC), in four short days, we will close the CfS and begin the difficult task of deciding which talks to accept into the LibrePlanet 2019 program. We're excited to hear from new speakers and those new to free software, as well as those of you who have been around for years.

We want you to submit to the CfS.

LibrePlanet is an annual conference hosted by the Free Software Foundation (FSF) for free software enthusiasts and anyone who cares about the intersection of technology and social justice. LibrePlanet brings together software developers, law and policy experts, activists, students, and computer users to learn skills, celebrate free software accomplishments, and face challenges to software freedom.

LibrePlanet 2019's theme is “Trailblazing Free Software.” In 1983, the free software movement was born with the announcement of the GNU Project. FSF founder Richard Stallman saw the dangers of proprietary code from the beginning: when code was kept secret from users, they would be controlled by the technology they used, instead of vice-versa. In contrast, free software emphasized a community-oriented philosophy of sharing code freely, enabling people to understand how the programs they use work, to build off of each other's code, to pay it forward by sharing their own code, and to create useful software that treats users fairly.

We're looking for sessions on a wide range of topics: art, community, education, legal, policy, and technical talks are just a few of the categories represented at previous LibrePlanet conferences. It's important to us to provide sessions that are friendly to newcomers and experienced hackers alike, and we welcome presentations for kids or teens.

Feel free to find some inspiration by browsing through the sessions programs of previous years: 2018 and 2017. You can also watch talks from past years on our MediaGoblin instance. Some sessions from previous years include:

  • A newcomer’s perspective on & patches for the free software movement
  • Copyleft, diversity, and critical infrastructure
  • Hardware reverse engineering insights from the MAME
  • libreCMC: The libre embedded GNU/Linux distro
  • Nurturing non-coders
  • State of the Onion
  • Technology for direct actions

If you have any questions, don't hesitate to reach out to us at [email protected].

06 November, 2018 04:42PM

pspp @ Savannah

PSPP 1.2.0 has been released.

I'm very pleased to announce the release of a new version of GNU PSPP. PSPP is a program for statistical analysis of sampled data. It is a free replacement for the proprietary program SPSS.

Changes from 1.0.1 to 1.2.0:

  • New experimental command SAVE DATA COLLECTION to save MDD files.
  • MTIME and YMDHMS variable formats now supported.
  • Build changes:
    • zlib is now a required dependency. (Previously it was optional.)
    • Gtk+3.18.0 or later must now be used when building.
    • The code implementing the sheet rendering has been removed. Instead we use a third party library: spread-sheet-widget.
  • The "NOMISSING" keyword when generating syntax for piecharts in the

frequencies command was omitted. This has been corrected.

06 November, 2018 02:50PM by Ben Pfaff

guile-cv @ Savannah

Guile-CV version 0.2.1

Guile-CV version 0.2.1 is released! (November 2018)

For a list of changes since the previous version, visit the NEWS file. For a complete description, consult the git summary and git log

06 November, 2018 01:06AM by David Pirotte

November 05, 2018

FSF Blogs

Alyssa Rosenzweig's summer internship wrap up

As you already know if you read my introductory blog post, over the summer, I interned with the Free Software Foundation tech team. A free software enthusiast, I joined the FSF in order to grow my appreciation, to work on interesting free software projects for which I normally would not have the opportunity, and to meet other free software supporters. My dreams were exceeded!

For my first project of the internship, I researched single-board computers in order to update the FSF's page detailing the freedom status of various single-board computers -- the page needed updating to reflect how software freedom continues to advance. You can read about my updates here.

For my second project, I was tasked with researching out-of-band remote server management. Like many organizations, the FSF hosts a number of servers, both on premises controlled by the FSF as well as external data centers. However, as anyone who has futzed with servers knows, computers are fickle. Even the most robust setup is prone to breaking once in a while... and sometimes those breakages can hang the server or prevent it from booting. Cue comic of a sysadmin asking, "Did you try turning it off and on again?"

The in-vogue free software solution is OpenBMC, a free software implementation of the IPMI remote administration stack. Unfortunately, due to the diversity of server boards we use, OpenBMC risked becoming a maintenance burden in and of itself.

Eventually, after a handful of whiteboard sessions with the tech team, I thought back on my work with ARM single-board computers. I realized a solution: rather than using a specialized BMC chip attached to the server motherboard, we could use an external single-board computer running GNU/Linux, remotely accessible over the Internet, connected to the various peripherals of interest. We settled on using a BeagleBone Black, which can run without proprietary blobs, connected to each server's serial port and power pins via USB-controlled relays. Finally, I wrapped up this system into a high-level utility, libremanage, and we were on our way.

My third and final project was still more ambitious. As you may know from my work with Panfrost, the free software driver for modern Mali GPUs, I enjoy liberating critical proprietary software by decoding its internal protocols and reimplementing them in freedom. So, we looked around for latent proprietary software involved with FSF operations. Although we eat our own dog food, there was one proprietary system that could not be ignored: PayPal, which recently began requiring nonfree JavaScript. Pah. Enter Pagamigo. (In Calculus, this is formally known as a p-series.)

Pagamigo liberates the proprietary software required to donate to organizations like the FSF or the Debian Project via PayPal. Soon, the FSF Web pages that take online payments will include instructions for using Pagamigo.

Unfortunately, everything good must come to an end. My summer classes finished; I have now returned home and am busy with fall semester classes. Still, although my internship with the FSF has ended, the lessons I have learned about free software will stay with me.

05 November, 2018 03:51PM

libredwg @ Savannah

libredwg-0.6.1 released [alpha]

This is a minor bugfix release, fixing
mostly a decoding error with LWPOLYLINE points.

Here are the compressed sources:
http://ftp.gnu.org/gnu/libredwg//libredwg-0.6.1.tar.gz (9.8MB)
http://ftp.gnu.org/gnu/libredwg//libredwg-0.6.1.tar.xz (3.7MB)

Here are the GPG detached signatures[*]:
http://ftp.gnu.org/gnu/libredwg//libredwg-0.6.1.tar.gz.sig
http://ftp.gnu.org/gnu/libredwg//libredwg-0.6.1.tar.xz.sig

Use a mirror for higher download bandwidth:
https://www.gnu.org/order/ftp.html

Here are more binaries:
https://github.com/LibreDWG/libredwg/releases/tag/0.6.1

Here are the SHA256 checksums:

290e315f8215e18520587cdb70810b57b78ffe1f28a9d54117c30aa9d4d79403 libredwg-0.6.1.tar.gz
dc15dc0074415e2fe3f562a3dc2a826e85589074cd7d46f5edd04baf731e9f36 libredwg-0.6.1.tar.xz

[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact. First, be sure to download both the .sig file
and the corresponding tarball. Then, run a command like this:

gpg --verify libredwg-0.6.1.tar.gz.sig

If that command fails because you don't have the required public key,
then run this command to import it:

gpg --keyserver keys.gnupg.net --recv-keys B4F63339E65D6414

and rerun the 'gpg --verify' command.

05 November, 2018 01:07PM by Reini Urban

November 04, 2018

health @ Savannah

GNU Health 3.4 RC1 ready to test !

Dear community

After over a year of hard work, we're getting close to the release of GNU Health 3.4 !

GH 3.4 comes with lots of new and exciting features, including the Federation, Thalamus, updated genetics, calendar server, native client and mongoDB integration, GH embedded (raspi) among others.

I just uploaded to pypi the Release Candidate 1 of the gnu health client (3.4rc1), thalamus (0.9.0), and the GNU Health HMIS component (3.4rc1)

In addition, you can download the HMIS component, with the plugins (Federation Resource Locator, GNU Health Camera and GNU Health Crypto) from our site:
http://health.gnu.org/downloads/development/unstable/gnuhealth-34rc1.tar.gz

This week I will also update the community server operating system, install Thalamus, the calendar server, the HMIS node, and MongoDB, so we can all test the federation features.

There is a lot to test, update localization / language strings and document. Please report any issues you may find, and enjoy testing the upcoming GNU Health ecosystem !

Best
Luis

04 November, 2018 11:30PM by Luis Falcon

November 02, 2018

FSF Blogs

Last chance to submit your nominations for the FSF Awards!

Is there someone who you think has advanced the progress of computing freedom, someone you think of as a free software hero? How about a great project that uses free software principles to benefit society? Now is your chance to nominate them for a Free Software Foundation (FSF) Award. The deadline to submit your nominations of individuals or projects for the FSF Awards is Sunday, November 4th, 2018 at 23:59 UTC.

Each year the FSF gives out two awards at the LibrePlanet conference; the Award for the Advancement of Free Software and the Award for Projects of Social Benefit. The winners of the 2018 awards will be announced at LibrePlanet 2019, happening on March 23rd and 24th, 2019, in the Greater Boston Area.

The FSF Award for the Advancement of Free Software is presented annually to an individual who has made a great contribution to the progress and development of free software, through activities that accord with the spirit of free software. Last year's award was accepted by Karen Sandler, the executive director of the Software Freedom Conservancy, as well as a perennial LibrePlanet speaker. Previous winners include Alexandre Oliva, Matthew Garrett, Alan Cox, Larry Lessig, Guido van Rossum, Miguel de Icaza and Larry Wall. Submit your nomination for this individual award at https://my.fsf.org/advancement-of-free-software-award-nomination.

The FSF Award for Projects of Social Benefit is presented to the project or team responsible for applying free software, or the ideas of the free software movement, in a project that intentionally and significantly benefits society in other aspects of life. Last year, Public Lab, a community and non-profit organization with the goal of democratizing science to address environmental issues by utilizing free software tools and techniques, received the award. Previous winners include SecureDrop, GNU Health, Tor, the Internet Archive, Creative Commons, and Wikipedia. Submit your nomination for this project/team award at https://my.fsf.org/projects-of-social-benefit-award-nomination.

The free software movement is powered by dedicated individuals and has fostered many incredible projects that are making a difference in both local and global communities. What are you waiting for? Take a few minutes to give props to people and projects that have changed the world.

02 November, 2018 08:11PM

October 31, 2018

Christopher Allan Webber

Announcing Goblins (the actor model foundation of Spritely)

In my last post I talked about launching the Spritely project in all its ambitiousness. As I said, I plan on releasing it as a series of "demos". What I mean by "demo" is fairly loose: things you can try and see, artifacts to indicate progress as I go. Convergence slowly towards a goal.

Over the last week I released the first version of the foundation of this work, which I'm calling Goblins. v0.1, a pre-pre-alpha release, is now out the door. Goblins is an actor model implementation for the Racket programming language. I think if you know some Racket, then the Goblins documentation should be fairly approachable, and I'd love to hear feedback. Not everything is documented, but it should give you a nice taste of what the core ideas are. (Astute readers may observe that Goblins' name shares striking resemblance to another project I have worked on; this is no coincidence and is indeed a hint as to what I think the future direction of that area of work is.)

Most live distributed systems are in some way a language-level actor model implementation, but knowing that you're an actor model implementation may change how you do things. (ActivityPub is itself an actor model protocol, though I think not all implementors realize that.) Goblins is the third generation of an actor model I've written, the previous ones being XUDD and 8sync. (Maybe if you count the big rewrite I did of 8sync to run it on top of fibers, it could be the fourth generation.)

If you read the Spritely blogpost you'll know that distributed games are part of the long con here. This isn't the first time I've written a game system on top of one of these actor model implementations; in fact if you scroll down on 8sync website you'll (currently) see a video of me presenting on Mudsync, a multi-user dungeon written in 8sync, where in the talk instead of slides I had rooms, and the audience was moving around in the world and I was changing it in response to their suggestions.

But the drive of the actor model connected to social distributed games goes back further for me. I initially got interested in an actor model the first time I tried to work on the whole multiplayer game front about a decade ago. A friend and I spent a couple hours experimenting with threads and locks and after the first demo it was obvious that was never going to work. I remembered I had been told by a former coworker that they had used a system that had an actor model + coroutines as its basis; I didn't know what either of those things were yet, but as I looked into them it became clear to me that this was the right route. But one piece since then until recently remained a mystery to me, which was how to manage the complex web of authorization between the objects.

Last year at TPAC, the World Wide Web consortium's conference, I was staying with some people who asked me what I would do if I had unlimited time to work on whatever I wanted. I sheepishly admitted to my dream of a federated social web as a distributed game, and expected to be laughed out of the room. I was surprised to find out that nearly everyone I was working with had some background in this same work and dream. This gave me some hope that I wasn't completely foolish, and the observation that even failure in persuing this ambitious dream would probably result in useful artifacts.

And last year at Rebooting Web of Trust, I hit a big breakthrough. I had the chance to meet Mark S. Miller in person, someone who's work I read but barely understood at the time, and this meeting in some ways changed the direction of my career. For one thing, it lead to us collaborating on the foundation for the ocap-ld specification, which came out of a paper we collaborated on from that event (also available in nicely formatted PDF form). But what I also discovered was that Mark Miller and company had actually built the distributed and secure social network dream in the late 1990s and called it Electric Communities (rare video of it being demonstrated, and a rare video of some of the out-there ideas). What I found out was that they had solved most of the remaining questions about authorization and security through object capabilities, and that was through a pile of object capability patterns built on top of the actor model. While Electric Communities did not survive, its foundation of the the "E" programming language lived on, pulling in many of its good ideas with it. I proceeded to read as much documentation about E and surrounding capability patterns as I could, and this has majorly influenced Goblins' design. (Don't underestimate the depth of ideas on erights.org just because it looks like an ancient Geocities page... it did come from that era after all...)

Another key insight came from discovering the Object-Capability Security in Virtual Environments paper. I won't go into details on this except to say that it's a must-read for this problem domain, with the caveat that it pulls in a lot of terminology baggage from the object capability (aka ocap) community. The ocap community is one of those groups that has so many of the right ideas but which unfortunately is also drowning in its own verbiage, despite true efforts to make the ideas more accessible. We (and I guess I'm part of this group now, so "we" is appropriate) need to do better, but it isn't easy.

Goblins is still in its very early days. Its api is unstable and it surely has bugs (this one in particular I need to deal with, and which even exposed an underlying bug in Racket, which did get fixed quickly because the Racket community is amazing). Please don't build anything production-oriented on top of it yet. That said, I'd love users to try things. Check out the docs, see if they're up your alley.

If you like this kind of work and want to see more of it, consider donating; I don't have a corporate sponsor, so progress is funded by people like you. And keep watching here; more Spritely demos/artifacts/releases on the horizon.

31 October, 2018 07:40PM by Christopher Lemmer Webber

FSF Blogs

Innovative biography of RMS returns to GNU Press Shop

After a period of unavailability, the GNU Press Shop is proud to once again offer Free As In Freedom (2.0), the innovative biography of Free Software Foundation founder and president Richard M. Stallman.

free as in freedom book cover

In 2002, Sam Williams wrote Free as in Freedom, a biography of Richard M. Stallman. In its epilogue, Williams expressed hope that choosing to distribute his book under the GNU Free Documentation License would enable and encourage others to share corrections and their own perspectives through modifications to his work.

Free as in Freedom (2.0) is Stallman's revision of the original biography. While preserving Williams's viewpoint, it includes factual corrections and extensive new commentary by Stallman, as well as new prefaces by both authors written for the occasion. It is a rare kind of biography, where the reader has the benefit of both the biographer's original words and the subject's response.

You can find Free As In Freedom (2.0) -- available with or without RMS's autograph -- here: https://shop.fsf.org/books/free-freedom-20-richard-stallman

31 October, 2018 03:07PM

October 29, 2018

bison @ Savannah

bison-3.2 released [stable]

We are very happy to announce the release of Bison 3.2!

Massive improvements were brought to the deterministic C++ skeleton,
lalr1.cc. When variants are enabled and the compiler supports C++11 or
better, move-only types can now be used for semantic values. C++98 support
is not deprecated. Please see the NEWS below for more details.

Many thanks to Frank Heckenbach for paving the way for this release with his
implementation of a skeleton in C++17.

==================================================================

Bison is a general-purpose parser generator that converts an annotated
context-free grammar into a deterministic LR or generalized LR (GLR) parser
employing LALR(1) parser tables. Bison can also generate IELR(1) or
canonical LR(1) parser tables. Once you are proficient with Bison, you can
use it to develop a wide range of language parsers, from those used in
simple desk calculators to complex programming languages.

Bison is upward compatible with Yacc: all properly-written Yacc grammars
ought to work with Bison with no change. Anyone familiar with Yacc should be
able to use Bison with little trouble. You need to be fluent in C or C++
programming in order to use Bison. Java is also supported.

Here is the GNU Bison home page:
https://gnu.org/software/bison/

==================================================================

Here are the compressed sources:
https://ftp.gnu.org/gnu/bison/bison-3.2.tar.gz (4.1MB)
https://ftp.gnu.org/gnu/bison/bison-3.2.tar.xz (2.1MB)

Here are the GPG detached signatures[*]:
https://ftp.gnu.org/gnu/bison/bison-3.2.tar.gz.sig
https://ftp.gnu.org/gnu/bison/bison-3.2.tar.xz.sig

Use a mirror for higher download bandwidth:
https://www.gnu.org/order/ftp.html

[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact. First, be sure to download both the .sig file
and the corresponding tarball. Then, run a command like this:

gpg --verify bison-3.2.tar.gz.sig

If that command fails because you don't have the required public key,
then run this command to import it:

gpg --keyserver keys.gnupg.net --recv-keys 0DDCAA3278D5264E

and rerun the 'gpg --verify' command.

This release was bootstrapped with the following tools:
Autoconf 2.69
Automake 1.16.1
Flex 2.6.4
Gettext 0.19.8.1
Gnulib v0.1-2176-ga79f2a287

==================================================================

29 October, 2018 08:30PM by Akim Demaille

mit-scheme @ Savannah

MIT/GNU Scheme 10.1 released

See the release notes for the highlights.

29 October, 2018 06:16AM by Chris Hanson

October 27, 2018

mailutils @ Savannah

Version 3.5

Version 3.5 is available for download from main GNU ftp server. You can also use one of the mirrors for higher download bandwidth.

New in this release

Support for Guile version 2.2.0 and later

Support for prior versions has been withdrawn.

New scheme functions

  • mu-encoder-port port name . args

Create encoding port using Mailutils filter name with optional arguments args. The port argument must be a port opened either for writing
or for reading, but not both. The returned port will have the same mode as port.

If port is open for reading, data will be read from it, passed through the filter and returned. If it is open for writing, data written to the returned port will be passed through filter and its output will be written to port.

  • mu-decoder-port port name . args

Create decoding port using Mailutils filter name with optional arguments args. The port argument must be a port opened either for writing
or for reading, but not both. The returned port will have the same mode as port.

If port is open for reading, data will be read from it, passed through the filter and returned. If it is open for writing, data written to the returned port will be passed through filter and its output will be written to port.

  • mu-header-decode hdr [charset]

Decode the header value hdr, encoded as per RFC 2047.
Optional charset defaults to "utf-8".

  • mu-header-encode hdr [encoding [charset]]

Encode the string hdr as per RFC 2047.
Allowed values for encoding are "base64" and "quoted-printable".
Default is selected depending on number of printable characters in hdr.
Optional charset defaults to "utf-8".

Introduced support for Python 3.x

Define sieve variables from the command line

The sieve utility now allows you to supply initial values for RFC 5229 variables using the --variable command line option, e.g.

Support for Berkeley DB versions 5 and 6

headline variable in the mail utility

The new %D specifier has been implemented, which allows the user to supply arbitrary strftime(3) format string for outputting message
date/time. E.g.:

In simplified form, %D can be followed by a single time format specifier. E.g. %DH can be used instead of %D{%H}.

Bugfixes

  • Fix alignment specifiers in the headline variable (mail utility)
  • Fix eventual segmentation violation in imap4d
  • Fix endianness bug in string to IP conversion
  • Force terminating null character in the output of mh_format
  • Fix bug in base64 encoder - don't return immediately upon receiving eof
  • Fix command expansion in wordsplit

27 October, 2018 08:10AM by Sergey Poznyakoff

gdbm @ Savannah

Version 1.18.1

Version 1.18.1 is available for download (see also list of mirrors).

This is an intermediate release that restores backward compatibility with databases created by gdbm 1.8 (and some later versions, if built with mmapped I/O disabled). See Debian bug 910911 for details.

27 October, 2018 06:39AM by Sergey Poznyakoff

October 26, 2018

FSF Blogs

GNU Spotlight with Mike Gerwitz: 8 new GNU releases!

For announcements of most new GNU releases, subscribe to the info-gnu mailing list: https://lists.gnu.org/mailman/listinfo/info-gnu.

To download: nearly all GNU software is available from https://ftp.gnu.org/gnu/, or preferably one of its mirrors from https://www.gnu.org/prep/ftp.html. You can use the URL https://ftpmirror.gnu.org/ to be automatically redirected to a (hopefully) nearby and up-to-date mirror.

A number of GNU packages, as well as the GNU operating system as a whole, are looking for maintainers and other assistance: please see https://www.gnu.org/server/takeaction.html#unmaint if you'd like to help. The general page on how to help GNU is at https://www.gnu.org/help/help.html.

If you have a working or partly working program that you'd like to offer to the GNU project as a GNU package, see https://www.gnu.org/help/evaluation.html.

As always, please feel free to write to us at [email protected] with any GNUish questions or suggestions for future installments.

26 October, 2018 03:15PM

October 22, 2018

parallel @ Savannah

GNU Parallel 20181022 ('Khashoggi') released

GNU Parallel 20181022 ('Khashoggi') has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/

Quote of the month:

What this country needs is a president with a strong understanding of GNU Parallel, Awk, Sed, Grep, and Diff
-- Gregg Housh @GreggHoush

New in this release:

  • env_parallel.fish: --session support (alpha quality)
  • GNU Parallel was cited in: High-throughput sequencing of murine immunoglobulin heavy chain repertoires using single side unique molecular identifiers on an Ion Torrent PGM https://doi.org/10.18632/oncotarget.25493
  • Bug fixes and man page updates.

Get the book: GNU Parallel 2018 http://www.lulu.com/shop/ole-tange/gnu-parallel-2018/paperback/product-23558902.html

GNU Parallel - For people who live life in the parallel lane.

About GNU Parallel

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.

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.

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.

You can find more about GNU Parallel at: http://www.gnu.org/s/parallel/

You can install GNU Parallel in just 10 seconds with: (wget -O - pi.dk/3 || curl pi.dk/3/) | bash

Watch the intro video on http://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

Walk through the tutorial (man parallel_tutorial). Your commandline will love you for it.

When using programs that use GNU Parallel to process data for publication please cite:

O. Tange (2018): GNU Parallel 2018, March 2018, https://doi.org/10.5281/zenodo.1146014.

If you like GNU Parallel:

  • Give a demo at your local user group/team/colleagues
  • Post the intro videos on Reddit/Diaspora*/forums/blogs/ Identi.ca/Google+/Twitter/Facebook/Linkedin/mailing lists
  • Get the merchandise https://gnuparallel.threadless.com/designs/gnu-parallel
  • Request or write a review for your favourite blog or magazine
  • Request or build a package for your favourite distribution (if it is not already there)
  • Invite me for your next conference

If you use programs that use GNU Parallel for research:

  • Please cite GNU Parallel in you publications (use --citation)

If GNU Parallel saves you money:

About GNU SQL

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

The database is addressed using a DBURL. If commands are left out you will get that database's interactive shell.

When using GNU SQL for a publication please cite:

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

About GNU Niceload

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.

22 October, 2018 11:32PM by Ole Tange

FSF Events

Richard Stallman - « Soberania tecnológica, privacidad y democracia » (Madrid, Spain)

Esta charla de Richard Stallman formará parte de CONSULCon (2018-11-22–24). No será técnica y será abierta al público; todos están invitados a asistir.

Esta charla de Richard Stallman no será técnica y será abierta al público; todos están invitados a asistir.

Lugar: Auditirio, Medialab Prado, Calle de la Alameda, 15, 28014 Madrid

Por favor, rellene este formulario para que podamos contactarle sobre futuros eventos en la región de Madrid.

22 October, 2018 05:30PM

October 21, 2018

GNUnet News

October 18, 2018

FSF News

Keynotes announced for LibrePlanet 2019 free software conference

BOSTON, Massachusetts, USA -- Thursday, October 18, 2018 -- The Free Software Foundation (FSF) today announced all four keynote speakers who will appear at the 11th annual LibrePlanet free software conference, which will take place in the Boston area, March 23-24, 2019.

Keynote speakers for the 10th annual LibrePlanet conference will include Debian Project contributor Bdale Garbee, free software activist Micky Metts, physician Tarek Loubani, and FSF founder and president Richard Stallman.

LibrePlanet is an annual conference for free software users and anyone who cares about the intersection of technology and social justice. For ten years, LibrePlanet has brought together thousands of diverse voices and knowledge bases, including free software developers, policy experts, activists, hackers, students, and people who have just begun to learn about free software.

Bdale Garbee

Bdale Garbee has contributed to the free software community since 1979. He was an early participant in the Debian Project, helped port Debian GNU/Linux to five architectures, served as the Debian Project Leader, then chairman of the Debian Technical Committee for nearly a decade, and remains active in the Debian community. For a decade, Bdale served as president of Software in the Public Interest. He also served on the board of directors of the Linux Foundation, representing individual affiliates and the developer community. Bdale currently serves on the boards of the Freedombox Foundation, the Linux Professional Institute, and Aleph Objects. He is also a member of the Evaluations Committee at the Software Freedom Conservancy. In 2008, Bdale became the first individual recipient of a Lutece d'Or award from the Federation Nationale de l'Industrie du Logiciel Libre in France.

Micky Metts

Micky Metts is an owner of Agaric, a worker-owned technology cooperative. She is an activist hacker, industry organizer, public speaker, connector, advisor, and visionary. Micky is a member of the MayFirst People Link Leadership Committee, and is a liaison between the Solidarity Economy Network (SEN) and the United States Federation of Worker Cooperatives (USFWC), with an intention to bring communities together. Micky is also a founding member of a cohort that is building a new Boston public high school based in cooperative learning: BoCoLab. She is a member of FSF.org and Drupal.org, a community based in free software. She is a published author contributing to the book Ours to Hack and to Own, one of the top technology books of 2017 in Wired magazine.

Tarek Loubani

Dr. Tarek Loubani is an emergency physician who works at the London Health Sciences Centre in Canada and at Al Shifa Hospital in the Gaza Strip. He is a fellow of the Shuttleworth Foundation, where he focuses on free software medical devices. His organization, the Glia Project, develops free/libre medical device designs for 3D printing, in an effort to help medical systems such as Gaza's gain self-sufficiency and local independence.

"This year's keynote speakers reflect the breadth of the free software community and its impact," said FSF executive director John Sullivan. "If you attend LibrePlanet or watch our free software-based livestream, you will have the opportunity to hear from dedicated contributors, activists, and people who saw an important need in our world and met it using free software."

Richard Stallman

As he does each year, FSF president Richard Stallman will present the Free Software Awards and discuss opportunities for, and threats to, the free software movement. In 1983, Stallman launched the free software movement, and he began developing the GNU operating system (see https://www.gnu.org) the following year. GNU is free software: anyone may copy it and redistribute it, with or without modifications. GNU/Linux (the GNU operating system used in combination with the kernel Linux) is used on tens of millions of computers today. Stallman has received the ACM Grace Hopper Award, a MacArthur Foundation fellowship, the Electronic Frontier Foundation's Pioneer Award, and the Takeda Award for Social/Economic Betterment, as well as several doctorates honoris causa, and has been inducted into the Internet Hall of Fame.

The call for proposals is open until October 26, 2018. General registration and exhibitor and sponsor registration are also open.

About LibrePlanet

LibrePlanet is the annual conference of the Free Software Foundation. Over the last decade, LibrePlanet has blossomed from a small gathering of FSF members into a vibrant multi-day event that attracts a broad audience of people who are interested in the values of software freedom. To sign up for announcements about LibrePlanet 2019, visit https://www.libreplanet.org/2019.

Each year at LibrePlanet, the FSF presents its annual Free Software Awards. Nominations for the awards are open through Sunday, November 4th, 2018 at 23:59 UTC.

For information on how your company can sponsor LibrePlanet or have a table in our exhibit hall, email [email protected].

LibrePlanet 2018 was held at MIT from March 24-25, 2018. Nearly 350 attendees came together from across the world for workshops and talks centered around the theme of "Freedom Embedded." You can watch videos from last year's conference, including the opening keynote, an exploration of the potential for the free software community to last forever by maintaining its ideals while also welcoming newcomers, by Deb Nicholson, who is now director of community operations for the Software Freedom Conservancy.

About the Free Software Foundation

The Free Software Foundation, founded in 1985, is dedicated to promoting computer users' right to use, study, copy, modify, and redistribute computer programs. The FSF promotes the development and use of free (as in freedom) software -- particularly the GNU operating system and its GNU/Linux variants -- and free documentation for free software. The FSF also helps to spread awareness of the ethical and political issues of freedom in the use of software, and its Web sites, located at https://www.fsf.org and https://www.gnu.org, are an important source of information about GNU/Linux. Donations to support the FSF's work can be made at https://donate.fsf.org. Its headquarters are in Boston, MA, USA.

More information about the FSF, as well as important information for journalists and publishers, is at https://www.fsf.org/press.

Media Contacts

Molly de Blanc
Campaigns Manager
Free Software Foundation
+1 (617) 542-5942
[email protected]

Photo of Richard Stallman by by Adte.ca. This image is licensed under a CC BY-SA 4.0 license. Photo of Tarek Loubani by Tarek Loubani. This image is licensed under a CC BY-SA 4.0 license. Photo of Bdale Garbee by Karen Garbee. This image is licensed under a CC BY-SA 4.0 license. Photo of Micky Metts by Micky Metts. This image is licensed under a CC BY 4.0 license.

18 October, 2018 07:05PM

FSF Events

Richard Stallman - « ¿El software que usas deniega tu libertad? » (Madrid, Spain)

Richard Stallman hablará sobre las metas y la filosofía del movimiento del Software Libre, y el estado y la historia del sistema operativo GNU, el cual junto con el núcleo Linux, es actualmente utilizado por decenas de millones de personas en todo el mundo.

Esta charla de Richard Stallman formará parte del III Foro de la Cultura (2018-11-09–11). No será técnica y será abierta al público; todos están invitados a asistir. Será posible asistir a la charla de Stallman sin registrarse hasta completar el aforo del recinto.

Lugar: Espacio Fundación Telefónica, C/ Fuencarral, 3, Madrid, España

Por favor, rellene este formulario para que podamos contactarle sobre futuros eventos en la región de Madrid

18 October, 2018 03:55PM

October 14, 2018

Christopher Allan Webber

Spritely: towards secure social spaces as virtual worlds

If you follow me on the fediverse, maybe you already know. I've sent an announcement to my work that I am switching to doing a project named Spritely on my own full time. (Actually I'm still going to be doing some contracting with my old job, so I'll still have some income, but I'll be putting a full 40 hours a week into Spritely.)

tl;dr: I'm working on building the next generation of the fediverse as a distributed game. You can support this work if you so wish.

What on earth is Spritely?

"Well, vaporware currently", has been my joke since announcing it, but the plans, and even some core components, are starting to congeal, and I have decided it's time to throw myself fully into it.

But I still haven't answered the question, so I'll try to do so in bullet points. Spritely:

  • Aims to bring stronger user security, better anti-abuse tooling, stronger resistance against censorship, and more interesting interactions to users of the fediverse.
  • Is based on the massively popular ActivityPub standard (which I co-authored, so I do know a thing or two about this).
  • Aims to transform distributed social networks into distributed social games / virtual worlds. The dreams of the 90s are alive in Spritely.
  • Recognizes that ActivityPub is based on the actor model, and a pure version of the actor model is itself already a secure object capability system, so we don't have to break the spec to gain those powers... just change the discipline of how we use it.
  • Will be written in Racket.
  • Is an umbrella project for a number of modular tools necessary to get to this goal. The first, an object capability actor model system for Racket named Goblins, should see its first public release in the next week or two.
  • And of course it will be 100% free/libre/open source software.

That's a lot to unpack, and it also may sound overly ambitious. The game part in particular may sound strange, but I'll defend it on three fronts. First, not too many people run federated social web servers, but a lot of people run Minecraft servers... lots of teenagers run Minecraft servers... and it's not because Minecraft has the best graphics or the best fighting (it certainly doesn't), it's because Minecraft allows you to build a world together with your friends. Second, players of old MUDs, MOOs, MUSHes and etc from the 90s may recognize that modern social networks are structurally degenerate forms of the kinds of environments that existed then, but contemporary social networks lack the concept of a sense of place and interaction. Third, many interesting projects (Python's Twisted library, Flickr, much of object capability security patterns) have come out of trying to build such massively multiplayer world systems. Because of this last one in particular, I think that shooting for the stars means that if we don't make it we're likely to at least make the moon, so failure is okay if it means other things come out of it. (Also, four: it's a fun and motivating use case for me which I have explored before.)

To keep Spritely from being total vaporware, the way I will approach the project is by regularly releasing a series of "demos", some of which may be disjoint, but will hopefully increasingly converge on the vision. Consider Spritely a skunkworks-in-the-public-interest for the federated social web.

But why?

Standardizing ActivityPub was a much more difficult effort than anticipated, but equally or more so more successful than I expected (partly due to Mastodon's adoption launching it past the sound barrier). In that sense this is great news. We now have dozens of projects adopting it, and the network has (at last I looked) over 1.5 million registered users (which isn't the same as active users).

So, mission accomplished, right? Well, there are a few things that bother me.

  • The kind of rich interactions one can do are limited by a lack of authorization policy. Again, I believe object capabilities provide this, but it's not well explained to the public how to use it. (By contrast, Access Control Lists and friends are absolutely the wrong approach.)
  • Users are currently insufficiently protected from spam, abuse, and harassment while at the same time administrators are overwhelmed. This is leading a number of servers to move to a whitelisting of servers, which both re-centralizes the system and prioritizes big instances over smaller instances (it shouldn't matter what instance size you're on; arguably we should be encouraging smaller ones even). There are some paths forward, and I will hint at just one: what would happen if instead of one inbox, we had multiple inboxes? If I don't know you, you can access me via my public inbox, but maybe that's heavily moderated or you have to pay "postage". If I do know you, you might have an address with more direct access to me.
  • Relatedly, contemporary fediverse interfaces borrow from surveillance-capitalism based popular social networks by focusing on breadth of relationships rather than depth. Ever notice how the first thing Twitter shows you when you hover over a person's face is how many followers they have? I don't know about you, but I immediately compare that to my own follower count, and I don't even want to. This encourages high school popularity contest type bullshit, and it's by design. What if instead of focusing on how many people we can connect to we instead focused on the depth of our relationships? Much of the fediverse has imported "what works" directly from Facebook and Twitter, but I'd argue there's a lot we can do if we drop the assumption that this is the ideal starting base.
  • The contemporary view in the fediverse is that social scoping is like Python scoping: locals (instance) and globals (federation). Instance administrators are even encouraged to set up to run communities based on a specific niche, which is a nice reason to motivate administrators but it causes problems: even small differences between servers' expected policies often result in servers banning each other entirely. (Sometimes this is warranted, and I'm not opposed to moderation but rather looking for more effective forms of it.) Yet most of us are one person but part of many different communities with different needs. For instance, Alice may be a computer programmer, a tabletop game enthusiast, a fanfiction author, and a member of her family. In each of those settings she may present herself differently and also have different expectations of what is acceptable behavior. Alice should not need multiple accounts for this on different servers, so it would seem the right answer for community gathering is closer to something like mailing lists. What is acceptable at the gaming table may not be acceptable at work, and what happens on the fanfiction community perhaps does not need to be shared with one's family, and each community should be empowered to moderate appropriately.
  • I'd like to bridge the gap between peer to peer and federated systems. One hint as to how to do this: what happens when you run ActivityPub servers over Tor onion services or I2P? What if instead of our messages living at http addresses that could down, they could be securely addressed by their encrypted contents?
  • Finally, I will admit the most urgent reason for these concerns... I'm very concerned politically about the state of the world and what I see as increasing authoritarianism and flagrant violations of human rights. I have a lot of worry that if we don't normalize use of decentralized and secure private systems, we will lose the ability to host them, though we've never needed them more urgently.

There are a lot of opportunities, and a lot of things I am excited about, but I am also afraid of inaction and how many regrets I will have if I don't try. I have the knowledge, the privilege, and the experience to at least attempt to make a dent in some of these things. I might not succeed. But I should try.

Who's going to pay for all this?

I don't really have a funding plan, so I guess this is kind of a non-answer. However, I do have a Patreon account you could donate to.

But should you donate? Well, I dunno, I feel like that's your call. Certainly many people are in worse positions than I am; I have a buffer and I still am doing some contracting to keep myself going for a while. Maybe you know people who need the money more than I do, or maybe you need it yourself. If this is the case, don't hesitate: take care of yourself and your loved ones first.

That said, FOSS in general has the property of being a public good but tends to have a free rider problem. While we did some fundraising for some of this stuff a few years ago, I gave the majority of the money to other people. Since then I've been mostly funding work on the federated social web myself in one way or another, usually by contracting on unrelated or quasi-related things to keep myself above the burn rate. I have the privilege and ability to do it, and I believe it's critical work. But I'd love to be able to work on this with focus, and maybe get things to the point to pull in and pay other people to help again. Perhaps if we reach that point I'll look at putting this work under a nonprofit. I do know I'm unwilling to break my FOSS principles to make it happen.

Anyway... you may even still be skeptical after reading all this about whether or not I can do it. I don't blame you... even I'm skeptical. But I'll try to convince you the way I'm going to convince myself: by pushing out demos until we reach something real.

Onwards and upwards!

14 October, 2018 08:20PM by Christopher Lemmer Webber

October 11, 2018

Andy Wingo

heap object representation in spidermonkey

I was having a look through SpiderMonkey's source code today and found something interesting about how it represents heap objects and wanted to share.

I was first looking to see how to implement arbitrary-length integers ("bigints") by storing the digits inline in the allocated object. (I'll use the term "object" here, but from JS's perspective, bigints are rather values; they don't have identity. But I digress.) So you have a header indicating how many words it takes to store the digits, and the digits follow. This is how JavaScriptCore and V8 implementations of bigints work.

Incidentally, JSC's implementation was taken from V8. V8's was taken from Dart. Dart's was taken from Go. We might take SpiderMonkey's from Scheme48. Good times, right??

When seeing if SpiderMonkey could use this same strategy, I couldn't find how to make a variable-sized GC-managed allocation. It turns out that in SpiderMonkey you can't do that! SM's memory management system wants to work in terms of fixed-sized "cells". Even for objects that store properties inline in named slots, that's implemented in terms of standard cell sizes. So if an object has 6 slots, it might be implemented as instances of cells that hold 8 slots.

Truly variable-sized allocations seem to be managed off-heap, via malloc or other allocators. I am not quite sure how this works for GC-traced allocations like arrays, but let's assume that somehow it does.

Anyway, the point of this blog post. I was looking to see which part of SpiderMonkey reserves space for type information. For example, almost all objects in V8 start with a "map" word. This is the object's "hidden class". To know what kind of object you've got, you look at the map word. That word points to information corresponding to a class of objects; it's not available to store information that might vary between objects of that same class.

Interestingly, SpiderMonkey doesn't have a map word! Or at least, it doesn't have them on all allocations. Concretely, BigInt values don't need to reserve space for a map word. I can start storing data right from the beginning of the object.

But how can this work, you ask? How does the engine know what the type of some arbitrary object is?

The answer has a few interesting wrinkles. Firstly I should say that for objects that need hidden classes -- e.g. generic JavaScript objects -- there is indeed a map word. SpiderMonkey calls it a "Shape" instead of a "map" or a "hidden class" or a "structure" (as in JSC), but it's there, for that subset of objects.

But not all heap objects need to have these words. Strings, for example, are values rather than objects, and in SpiderMonkey they just have a small type code rather than a map word. But you know it's a string rather than something else in two ways: one, for "newborn" objects (those in the nursery), the GC reserves a bit to indicate whether the object is a string or not. (Really: it's specific to strings.)

For objects promoted out to the heap ("tenured" objects), objects of similar kinds are allocated in the same memory region (in kind-specific "arenas"). There are about a dozen trace kinds, corresponding to arena kinds. To get the kind of object, you find its arena by rounding the object's address down to the arena size, then look at the arena to see what kind of objects it has.

There's another cell bit reserved to indicate that an object has been moved, and that the rest of the bits have been overwritten with a forwarding pointer. These two reserved bits mostly don't conflict with any use a derived class might want to make from the first word of an object; if the derived class uses the first word for integer data, it's easy to just reserve the bits. If the first word is a pointer, then it's probably always aligned to a 4- or 8-byte boundary, so the low bits are zero anyway.

The upshot is that while we won't be able to allocate digits inline to BigInt objects in SpiderMonkey in the general case, we won't have a per-object map word overhead; and we can optimize the common case of digits requiring only a word or two of storage to have the digit pointer point to inline storage. GC is about compromise, and it seems this can be a good one.

Well, that's all I wanted to say. Looking forward to getting BigInt turned on upstream in Firefox!

11 October, 2018 02:33PM by Andy Wingo

FSF News

FSF statement on Microsoft joining the Open Invention Network

Microsoft's announcements on October 4th and 10th, that it has joined both LOT and the Open Invention Network (OIN), are significant steps in the right direction, potentially providing respite from Microsoft's well-known extortion of billions of dollars from free software redistributors.

These steps, though, do not by themselves fully address the problem of computational idea patents, or even Microsoft's specific infringement claims. They do not mean that Microsoft has dismantled or freely licensed its entire patent portfolio. The agreements for both LOT and OIN have substantial limitations and exclusions. LOT only deals with the problem of patent trolling by non-practicing entities. OIN's nonaggression agreement only covers a defined list of free software packages, and any OIN member, including Microsoft, can withdraw completely with thirty days notice.

With these limitations in mind, FSF welcomes the announcements, and calls on Microsoft to take additional steps to continue the momentum toward a complete resolution:

1) Make a clear, unambiguous statement that it has ceased all patent infringement claims on the use of Linux in Android.

2) Work within OIN to expand the definition of what it calls the "Linux System" so that the list of packages protected from patents actually includes everything found in a GNU/Linux system. This means, for example, removing the current arbitrary and very intentional exclusions for packages in the area of multimedia -- one of the primary patent minefields for free software. We suggest that this definition include every package in Debian's default public package repository.

3) Use the past patent royalties extorted from free software to fund the effective abolition of all patents covering ideas in software. This can be done by supporting grassroots efforts like the FSF's End Software Patents campaign, or by Microsoft directly urging the US Congress to pass legislation excluding software from the effects of patents, or both. Without this, the threats can come back with a future leadership change at Microsoft, or with changes in OIN's own corporate structure and licensing arrangements. This is also the best way for Microsoft to show that it does not intend to use patents as a weapon against any free software, beyond just that free software which is part of OIN's specific list.

The FSF appreciates what Microsoft joining OIN seems to signal about its changing attitude toward computational idea patents. Taking these three additional steps would remove all doubt and any potential for backsliding. We look forward to future collaboration on fully addressing the threat of patents to free software development and computer user freedom.

The FSF will also continue to monitor the situation, for any signs that Microsoft intends to still continue patent aggression, in ways permitted by the terms of LOT and OIN. We encourage anyone who is a target of such patent aggression by Microsoft to contact us at [email protected].

Media Contact

John Sullivan
Executive Director
+1 (617) 542-5942
[email protected]

About the Free Software Foundation

The Free Software Foundation, founded in 1985, is dedicated to promoting computer users' right to use, study, copy, modify, and redistribute computer programs. The FSF promotes the development and use of free (as in freedom) software -- particularly the GNU operating system and its GNU/Linux variants -- and free documentation for free software. The FSF also helps to spread awareness of the ethical and political issues of freedom in the use of software, and its Web sites, located at https://fsf.org and https://gnu.org, are an important source of information about GNU/Linux. Donations to support the FSF's work can be made at https://donate.fsf.org. Its headquarters are in Boston, MA, USA.

More information about the FSF, as well as important information for journalists and publishers, is at https://www.fsf.org/press.

11 October, 2018 01:13AM

October 10, 2018

FSF job opportunity: program manager

The Free Software Foundation (FSF), a Massachusetts 501(c)(3) charity with a worldwide mission to protect computer user freedom, seeks a motivated and talented Boston-based individual to be our full-time program manager.

Reporting to the executive director, the program manager co-leads our campaigns team. This position develops and promotes longer-term resources and advocacy programs related to increasing the use of free software and expanding and advancing the free software movement. The program manager plays a key role in external communications, fundraising, member engagement, and special events.

Examples of job responsibilities include, but are not limited to:

  • Lead the planning and successful implementation of most events, such as our annual LibrePlanet conference;
  • Develop and maintain longer-term free software resources, such as the High Priority Projects list;
  • Coordinate two annual fundraising appeals, including goal setting, strategy, and working with outside contractors;
  • Implement the FSF's communications and messaging strategy, including serving as a primary point of contact with press and the external public;
  • Write and edit for FSF blogs, external periodical publications, and both digital and print resources;
  • Assist with planning and execution of issue campaigns, working in concert with the campaigns manager;
  • Occasional conference travel and speaking as an FSF representative.

Ideal candidates have at least three to five years of work experience with project management, fundraising, events management, and nonprofit program management. Proficiency, experience, and comfort with professional writing and media relationships preferred. Because the FSF works globally and seeks to have our materials distributed in as many languages as possible, multilingual candidates will have an advantage. With our small staff of fourteen, each person makes a clear contribution. We work hard, but offer a humane and fun work environment at an office located in the heart of downtown Boston. The FSF is a mature but growing organization that provides great potential for advancement; existing staff get the first chance at any new job openings.

Benefits and Salary

This job is a union position that must be worked on-site at the FSF's downtown Boston office. The salary is fixed at $61,672/year and is non-negotiable. Other benefits include:

  • Fully subsidized individual or family health coverage through Blue Cross Blue Shield;
  • Partially subsidized dental plan;
  • Four weeks of paid vacation annually;
  • Seventeen paid holidays annually;
  • Weekly remote work allowance;
  • Public transit commuting cost reimbursement;
  • 403(b) program with employer match;
  • Yearly cost-of-living pay increases based on government guidelines;
  • Health care expense reimbursement;
  • Ergonomic budget;
  • Relocation (to Boston area) expense reimbursement;
  • Conference travel and professional development opportunities; and
  • Potential for an annual performance bonus.

Application Instructions

Applications must be submitted via email to [email protected]. The email must contain the subject line "Program Manager." A complete application should include:

  • Cover letter
  • Resume
  • Two recent writing samples

All materials must be in a free format. Email submissions that do not follow these instructions will probably be overlooked. No phone calls, please.

Applications will be reviewed on a rolling basis until the position is filled. To guarantee consideration, submit your application by Monday, November 19, 2018.

The FSF is an equal opportunity employer and will not discriminate against any employee or application for employment on the basis of race, color, marital status, religion, age, sex, sexual orientation, national origin, handicap, or any other legally protected status recognized by federal, state or local law. We value diversity in our workplace.

About the Free Software Foundation

The Free Software Foundation, founded in 1985, is dedicated to promoting computer users' right to use, study, copy, modify, and redistribute computer programs. The FSF promotes the development and use of free (as in freedom) software — particularly the GNU operating system and its GNU/Linux variants — and free documentation for free software. The FSF also helps to spread awareness of the ethical and political issues of freedom in the use of software, and its Web sites, located at fsf.org and gnu.org, are an important source of information about GNU/Linux. Donations to support the FSF's work can be made at https://donate.fsf.org. We are based in Boston, MA, USA.

More information about the FSF, as well as important information for journalists and publishers, is at https://www.fsf.org/press.

10 October, 2018 08:35PM

FSF Events

Richard Stallman - "Can we defend freedom and privacy from computing?" (Chicago, IL)

This speech by Richard Stallman will be nontechnical, admission is gratis, and the public is encouraged to attend.

Location: Hermann Hall Auditorium, 3241 S Federal St. (CTA Red and Green Line trains, and number 1 and 29 buses), Chicago, IL

Please fill out our contact form, so that we can contact you about future events in and around Chicago.

10 October, 2018 07:25PM

GNU Guix

A packaging tutorial for Guix

Introduction

GNU Guix stands out as the hackable package manager, mostly because it uses GNU Guile, a powerful high-level programming language, one of the Scheme dialects from the Lisp family.

Package definitions are also written in Scheme, which empowers Guix in some very unique ways, unlike most other package managers that use shell scripts or simple languages.

  • Use functions, structures, macros and all of Scheme expressiveness for your package definitions.

  • Inheritance makes it easy to customize a package by inheriting from it and modifying only what is needed.

  • Batch processing: the whole package collection can be parsed, filtered and processed. Building a headless server with all graphical interfaces stripped out? It's possible. Want to rebuild everything from source using specific compiler optimization flags? Pass the #:make-flags "..." argument to the list of packages. It wouldn't be a stretch to think Gentoo USE flags here, but this goes even further: the changes don't have to be thought out beforehand by the packager, they can be programmed by the user!

The following tutorial covers all the basics around package creation with Guix. It does not assume much knowledge of the Guix system nor of the Lisp language. The reader is only expected to be familiar with the command line and to have some basic programming knowledge.

A "Hello World" package

The “Defining Packages” section of the manual introduces the basics of Guix packaging. In the following section, we will partly go over those basics again.

GNU hello is a dummy project that serves as an idiomatic example for packaging. It uses the GNU build system (./configure && make && make install). Guix already provides a package definition which is a perfect example to start with. You can look up its declaration with guix edit hello from the command line. Let's see how it looks:

(define-public hello
  (package
    (name "hello")
    (version "2.10")
    (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/hello/hello-" version
                                  ".tar.gz"))
              (sha256
               (base32
                "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
    (build-system gnu-build-system)
    (synopsis "Hello, GNU world: An example GNU package")
    (description
     "GNU Hello prints the message \"Hello, world!\" and then exits.  It
serves as an example of standard GNU coding practices.  As such, it supports
command-line arguments, multiple languages, and so on.")
    (home-page "https://www.gnu.org/software/hello/")
    (license gpl3+)))

As you can see, most of it is rather straightforward. But let's review the fields together:

  • name: The project name. Using Scheme conventions, we prefer to keep it lower case, without underscore and using dash-separated words.
  • source: This field contains a description of the source code origin. The origin record contains these fields:

    1. The method, here url-fetch to download via HTTP/FTP, but other methods exist, such as git-fetch for Git repositories.
    2. The URI, which is typically some https:// location for url-fetch. Here the special mirror://gnu refers to a set of well known locations, all of which can be used by Guix to fetch the source, should some of them fail.
    3. The sha256 checksum of the requested file. This is essential to ensure the source is not corrupted. Note that Guix works with base32 strings, hence the call to the base32 function.
  • build-system: This is where the power of abstraction provided by the Scheme language really shines: in this case, the gnu-build-system abstracts away the famous ./configure && make && make install shell invocations. Other build systems include the trivial-build-system which does not do anything and requires from the packager to program all the build steps, the python-build-system, the emacs-build-system, and many more.
  • synopsis: It should be a concise summary of what the package does. For many packages a tagline from the project's home page can be used as the synopsis.
  • description: Same as for the synopsis, it's fine to re-use the project description from the homepage. Note that Guix uses Texinfo syntax.
  • home-page: Use HTTPS if available.
  • license: See guix/licenses.scm in the project source for a full list.

Time to build our first package! Nothing fancy here for now: we will stick to a dummy "my-hello", a copy of the above declaration.

As with the ritualistic "Hello World" taught with most programming languages, this will possibly be the most "manual" approach. We will work out an ideal setup later; for now we will go the simplest route.

Save the following to a file my-hello.scm.

(use-modules (guix packages)
             (guix download)
             (guix build-system gnu)
             (guix licenses))

(package
  (name "my-hello")
  (version "2.10")
  (source (origin
            (method url-fetch)
            (uri (string-append "mirror://gnu/hello/hello-" version
                                ".tar.gz"))
            (sha256
             (base32
              "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
  (build-system gnu-build-system)
  (synopsis "Hello, Guix world: An example custom Guix package")
  (description
   "GNU Hello prints the message \"Hello, world!\" and then exits.  It
serves as an example of standard GNU coding practices.  As such, it supports
command-line arguments, multiple languages, and so on.")
  (home-page "https://www.gnu.org/software/hello/")
  (license gpl3+))

We will explain the extra code in a moment.

Feel free to play with the different values of the various fields. If you change the source, you'll need to update the checksum. Indeed, Guix refuses to build anything if the given checksum does not match the computed checksum of the source code. To obtain the correct checksum of the package declaration, we need to download the source, compute the sha256 checksum and convert it to base32.

Thankfully, Guix can automate this task for us; all we need is to provide the URI:

$ guix download mirror://gnu/hello/hello-2.10.tar.gz

Starting download of /tmp/guix-file.JLYgL7
From https://ftpmirror.gnu.org/gnu/hello/hello-2.10.tar.gz...
following redirection to `https://mirror.ibcp.fr/pub/gnu/hello/hello-2.10.tar.gz'...
 …10.tar.gz  709KiB                                 2.5MiB/s 00:00 [##################] 100.0%
/gnu/store/hbdalsf5lpf01x4dcknwx6xbn6n5km6k-hello-2.10.tar.gz
0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i

In this specific case the output tells us which mirror was chosen. If the result of the above command is not the same as in the above snippet, update your my-hello declaration accordingly.

Note that GNU package tarballs come with an OpenPGP signature, so you should definitely check the signature of this tarball with gpg to authenticate it before going further:

$ guix download mirror://gnu/hello/hello-2.10.tar.gz.sig

Starting download of /tmp/guix-file.03tFfb
From https://ftpmirror.gnu.org/gnu/hello/hello-2.10.tar.gz.sig...
following redirection to `https://ftp.igh.cnrs.fr/pub/gnu/hello/hello-2.10.tar.gz.sig'...
 ….tar.gz.sig  819B                                                                                                                       1.2MiB/s 00:00 [##################] 100.0%
/gnu/store/rzs8wba9ka7grrmgcpfyxvs58mly0sx6-hello-2.10.tar.gz.sig
0q0v86n3y38z17rl146gdakw9xc4mcscpk8dscs412j22glrv9jf
$ gpg --verify /gnu/store/rzs8wba9ka7grrmgcpfyxvs58mly0sx6-hello-2.10.tar.gz.sig /gnu/store/hbdalsf5lpf01x4dcknwx6xbn6n5km6k-hello-2.10.tar.gz
gpg: Signature made Sun 16 Nov 2014 01:08:37 PM CET
gpg:                using RSA key A9553245FDE9B739
gpg: Good signature from "Sami Kerola <[email protected]>" [unknown]
gpg:                 aka "Sami Kerola (http://www.iki.fi/kerolasa/) <[email protected]>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 8ED3 96E3 7E38 D471 A005  30D3 A955 3245 FDE9 B739

Now you can happily run

$ guix package --install-from-file=my-hello.scm

You should now have my-hello in your profile!

$ guix package --list-installed=my-hello
my-hello    2.10    out
/gnu/store/f1db2mfm8syb8qvc357c53slbvf1g9m9-my-hello-2.10

We've gone as far as we could without any knowledge of Scheme. Now is the right time to introduce the minimum we need from the language before we can proceed.

A Scheme crash-course

As we've seen above, basic packages don't require much Scheme knowledge, if at all. But as you progress and your desire to write more and more complex packages grows, it will become both necessary and empowering to hone your Lisper skills.

Since an extensive Lisp course is very much out of the scope of this tutorial, we will only cover some basics here.

Guix uses the Guile implementation of Scheme. To start playing with the language, install it with guix package --install guile and start a REPL by running guile from the command line.

Alternatively you can also run guix environment --ad-hoc guile -- guile if you'd rather not have Guile installed in your user profile.

In the following examples we use the > symbol to denote the REPL prompt, that is, the line reserved for user input. See the Guile manual for more details on the REPL.

  • Scheme syntax boils down to a tree of expressions (or s-expression in Lisp lingo). An expression can be a literal such numbers and strings, or a compound which is a parenthesized list of compounds and literals. #t and #f stand for the booleans "true" and "false", respectively.

    Examples of valid expressions:

    > "Hello World!"
    "Hello World!"
    > 17
    17
    > (display (string-append "Hello " "Guix" "\n"))
    "Hello Guix!"
  • This last example is a function call embedded in another function call. When a parenthesized expression is evaluated, the first term is the function and the rest are the arguments passed to the function. Every function returns the last evaluated expression as value.

  • Anonymous functions are declared with the lambda term:

    > (lambda (x) (* x x))
    #<procedure 120e348 at <unknown port>:24:0 (x)>

    The above lambda returns the square of its argument. Since everything is an expression, the lambda expression returns an anonymous function, which can in turn be applied to an argument:

    > ((lambda (x) (* x x)) 3)
    9
  • Anything can be assigned a global name with define:

    > (define a 3)
    > (define square (lambda (x) (* x x)))
    > (square a)
    9
  • Procedures can be defined more concisely with the following syntax:

    (define (square x) (* x x))
  • A list structure can be created with the list procedure:

    > (list 2 a 5 7)
    (2 3 5 7)
  • The quote disables evaluation of a parenthesized expression: the first term is not called over the other terms. Thus it effectively returns a list of terms.

    > '(display (string-append "Hello " "Guix" "\n"))
    (display (string-append "Hello " "Guix" "\n"))
    > '(2 a 5 7)
    (2 a 5 7)
  • The quasiquote disables evaluation of a parenthesized expression until a comma re-enables it. Thus it provides us with fine-grained control over what is evaluated and what is not.

    > `(2 a 5 7 (2 ,a 5 ,(+ a 4)))
    (2 a 5 7 (2 3 5 7))

    Note that the above result is a list of mixed elements: numbers, symbols (here a) and the last element is a list itself.

  • Multiple variables can be named locally with let:

    > (define x 10)
    > (let ((x 2)
            (y 3))
        (list x y))
    (2 3)
    > x
    10
    > y
    ERROR: In procedure module-lookup: Unbound variable: y

    Use let* to allow later variable declarations to refer to earlier definitions.

    > (let* ((x 2)
             (y (* x 3)))
        (list x y))
    (2 6)
  • The keyword syntax is #:, it is used to create unique identifiers. See also the Keywords section in the Guile manual.

  • The percentage % is typically used for read-only global variables in the build stage. Note that it is merely a convention, like _ in C. Scheme Lisp treats % exactly the same as any other letter.

  • Modules are created with define-module. For instance

    (define-module (guix build-system ruby)
      #:use-module (guix store)
      #:export (ruby-build
                ruby-build-system))

    defines the module ruby which must be located in guix/build-system/ruby.scm somewhere in GUILE_LOAD_PATH. It depends on the (guix store) module and it exports two symbols, ruby-build and ruby-build-system.

For a more detailed introduction, check out Scheme at a Glance, by Steve Litt.

One of the reference Scheme books is the seminal Structure and Interpretation of Computer Programs, by Harold Abelson and Gerald Jay Sussman, with Julie Sussman. You'll find a free copy online, together with videos of the lectures by the authors. The book is available in Texinfo format as the sicp Guix package. Go ahead, run guix package --install sicp and start reading with info sicp (or with the Emacs Info reader). An unofficial ebook is also available.

You'll find more books, tutorials and other resources at https://schemers.org/.

Setup

Now that we know some Scheme basics we can detail the different possible setups for working on Guix packages.

There are several ways to set up a Guix packaging environment.

We recommend you work directly on the Guix source checkout since it makes it easier for everyone to contribute to the project.

But first, let's look at other possibilities.

Local file

This is what we previously did with my-hello. Now that we know more Scheme, let's explain the leading chunks. As stated in guix package --help:

-f, --install-from-file=FILE
                       install the package that the code within FILE
                       evaluates to

Thus the last expression must return a package, which is the case in our earlier example.

The use-modules expression tells which of the modules we need in the file. Modules are a collection of values and procedures. They are commonly called "libraries" or "packages" in other programming languages.

GUIX_PACKAGE_PATH

Note: Starting from Guix 0.16, the more flexible Guix "channels" are the preferred way and supersede GUIX_PACKAGE_PATH. See below.

It can be tedious to specify the file from the command line instead of simply calling guix package --install my-hello as you would do with the official packages.

Guix makes it possible to streamline the process by adding as many "package declaration paths" as you want.

Create a directory, say ~./guix-packages and add it to the GUIX_PACKAGE_PATH environment variable:

$ mkdir ~/guix-packages
$ export GUIX_PACKAGE_PATH=~/guix-packages

To add several directories, separate them with a colon (:).

Our previous my-hello needs some adjustments though:

(define-module (my-hello)
  #:use-module (guix licenses)
  #:use-module (guix packages)
  #:use-module (guix build-system gnu)
  #:use-module (guix download))

(define-public my-hello
  (package
    (name "my-hello")
    (version "2.10")
    (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/hello/hello-" version
                                  ".tar.gz"))
              (sha256
               (base32
                "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
    (build-system gnu-build-system)
    (synopsis "Hello, Guix world: An example custom Guix package")
    (description
     "GNU Hello prints the message \"Hello, world!\" and then exits.  It
serves as an example of standard GNU coding practices.  As such, it supports
command-line arguments, multiple languages, and so on.")
    (home-page "https://www.gnu.org/software/hello/")
    (license gpl3+)))

Note that we have assigned the package value to an exported variable name with define-public. This is effectively assigning the package to the my-hello variable so that it can be referenced, among other as dependency of other packages.

If you use guix package --install-from-file=my-hello.scm on the above file, it will fail because the last expression, define-public, does not return a package. If you want to use define-public in this use-case nonetheless, make sure the file ends with an evaluation of my-hello:

; ...
(define-public my-hello
  ; ...
  )

my-hello

This last example is not very typical.

Now my-hello should be part of the package collection like all other official packages. You can verify this with:

$ guix package --show=my-hello

Guix channels

Guix 0.16 features channels, which is very similar to GUIX_PACKAGE_PATH but provides better integration and provenance tracking. Channels are not necessarily local, they can be maintained as a public Git repository for instance. Of course, several channels can be used at the same time.

See the “Channels” section in the manual for setup details.

Direct checkout hacking

Working directly on the Guix project is recommended: it reduces the friction when the time comes to submit your changes upstream to let the community benefit from your hard work!

Unlike most software distributions, the Guix repository holds in one place both the tooling (including the package manager) and the package definitions. This choice was made so that it would give developers the flexibility to modify the API without breakage by updating all packages at the same time. This reduces development inertia.

Check out the official Git repository:

$ git clone https://git.savannah.gnu.org/git/guix.git

In the rest of this article, we use $GUIX_CHECKOUT to refer to the location of the checkout.

Follow the instruction from the "Contributing" chapter in the manual to set up the repository environment.

Once ready, you should be able to use the package definitions from the repository environment.

Feel free to edit package definitions found in $GUIX_CHECKOUT/gnu/packages.

The $GUIX_CHECKOUT/pre-inst-env script lets you use guix over the package collection of the repository.

  • Search packages, such as Ruby:

    $ cd $GUIX_CHECKOUT
    $ ./pre-inst-env guix package --list-available=ruby
        ruby    1.8.7-p374      out     gnu/packages/ruby.scm:119:2
        ruby    2.1.6   out     gnu/packages/ruby.scm:91:2
        ruby    2.2.2   out     gnu/packages/ruby.scm:39:2
  • Build a package, here Ruby version 2.1:

    $ ./pre-inst-env guix build --keep-failed [email protected]
    /gnu/store/c13v73jxmj2nir2xjqaz5259zywsa9zi-ruby-2.1.6
  • Install it to your user profile:

    $ ./pre-inst-env guix package --install [email protected]
  • Check for common mistakes:

    $ ./pre-inst-env guix lint [email protected]

Guix strives at maintaining a high packaging standard; when contributing to the Guix project, remember to

Once you are happy with the result, you are welcome to send your contribution to make it part of Guix. This process is also detailed in the manual.

It's a community effort so the more join in, the better Guix becomes!

Extended example

The above "Hello World" example is as simple as it goes. Packages can be more complex than that and Guix can handle more advanced scenarios. Let's look at another, more sophisticated package (slightly modified from the source):

(define-module (gnu packages version-control)
  #:use-module ((guix licenses) #:prefix license:)
  #:use-module (guix utils)
  #:use-module (guix packages)
  #:use-module (guix git-download)
  #:use-module (guix build-system cmake)
  #:use-module (gnu packages ssh)
  #:use-module (gnu packages web)
  #:use-module (gnu packages pkg-config)
  #:use-module (gnu packages python)
  #:use-module (gnu packages compression)
  #:use-module (gnu packages tls))

(define-public my-libgit2
  (let ((commit "e98d0a37c93574d2c6107bf7f31140b548c6a7bf")
        (revision "1"))
    (package
      (name "my-libgit2")
      (version (git-version "0.26.6" revision commit))
      (source (origin
                (method git-fetch)
                (uri (git-reference
                      (url "https://github.com/libgit2/libgit2/")
                      (commit commit)))
                (file-name (git-file-name name version))
                (sha256
                 (base32
                  "17pjvprmdrx4h6bb1hhc98w9qi6ki7yl57f090n9kbhswxqfs7s3"))
                (patches (search-patches "libgit2-mtime-0.patch"))
                (modules '((guix build utils)))
                (snippet '(begin
                            ;; Remove bundled software.
                            (delete-file-recursively "deps")
                            #t))))
      (build-system cmake-build-system)
      (outputs '("out" "debug"))
      (arguments
       `(#:tests? #t                            ; Run the test suite (this is the default)
         #:configure-flags '("-DUSE_SHA1DC=ON") ; SHA-1 collision detection
         #:phases
         (modify-phases %standard-phases
           (add-after 'unpack 'fix-hardcoded-paths
             (lambda _
               (substitute* "tests/repo/init.c"
                 (("#!/bin/sh") (string-append "#!" (which "sh"))))
               (substitute* "tests/clar/fs.h"
                 (("/bin/cp") (which "cp"))
                 (("/bin/rm") (which "rm")))
               #t))
           ;; Run checks more verbosely.
           (replace 'check
             (lambda _ (invoke "./libgit2_clar" "-v" "-Q")))
           (add-after 'unpack 'make-files-writable-for-tests
               (lambda _ (for-each make-file-writable (find-files "." ".*")))))))
      (inputs
       `(("libssh2" ,libssh2)
         ("http-parser" ,http-parser)
         ("python" ,python-wrapper)))
      (native-inputs
       `(("pkg-config" ,pkg-config)))
      (propagated-inputs
       ;; These two libraries are in 'Requires.private' in libgit2.pc.
       `(("openssl" ,openssl)
         ("zlib" ,zlib)))
      (home-page "https://libgit2.github.com/")
      (synopsis "Library providing Git core methods")
      (description
       "Libgit2 is a portable, pure C implementation of the Git core methods
provided as a re-entrant linkable library with a solid API, allowing you to
write native speed custom Git applications in any language with bindings.")
      ;; GPLv2 with linking exception
      (license license:gpl2))))

(In those cases were you only want to tweak a few fields from a package definition, you should rely on inheritance instead of copy-pasting everything. See below.)

Let's discuss those fields in depth.

git-fetch method

Unlike the url-fetch method, git-fetch expects a git-reference which takes a Git repository and a commit. The commit can be any Git reference such as tags, so if the version is tagged, then it can be used directly. Sometimes the tag is prefixed with a v, in which case you'd use (commit (string-append "v" version)).

To ensure that the source code from the Git repository is stored in a unique directory with a readable name we use (file-name (git-file-name name version)).

Note that there is also a git-version procedure that can be used to derive the version when packaging programs for a specific commit.

Snippets

Snippets are quoted (i.e. non-evaluated) Scheme code that are a means of patching the source. They are a Guix-y alternative to the traditional .patch files. Because of the quote, the code in only evaluated when passed to the Guix daemon for building.

There can be as many snippet as needed.

Snippets might need additional Guile modules which can be imported from the modules field.

Inputs

First, a syntactic comment: See the quasi-quote / comma syntax?

(native-inputs
 `(("pkg-config" ,pkg-config)))

is equivalent to

(native-inputs
 (list (list "pkg-config" pkg-config)))

You'll mostly see the former because it's shorter.

There are 3 different input types. In short:

  • native-inputs: Required for building but not runtime – installing a package through a substitute won't install these inputs.
  • inputs: Installed in the store but not in the profile, as well as being present at build time.
  • propagated-inputs: Installed in the store and in the profile, as well as being present at build time.

See the package reference in the manual for more details.

The distinction between the various inputs is important: if a dependency can be handled as an input instead of a propagated input, it should be done so, or else it "pollutes" the user profile for no good reason.

For instance, a user installing a graphical program that depends on a command line tool might only be interested in the graphical part, so there is no need to force the command line tool into the user profile. The dependency is a concern to the package, not to the user. Inputs make it possible to handle dependencies without bugging the user by adding undesired executable files (or libraries) to their profile.

Same goes for native-inputs: once the program is installed, build-time dependencies can be safely garbage-collected. It also matters when a substitute is available, in which case only the inputs and propagated inputs will be fetched: the native inputs are not required to install a package from a substitute.

Outputs

Just like how a package can have multiple inputs, it can also produce multiple outputs.

Each output corresponds to a separate directory in the store.

The user can choose which output to install; this is useful to save space or to avoid polluting the user profile with unwanted executables or libraries.

Output separation is optional. When the outputs field is left out, the default and only output (the complete package) is referred to as "out".

Typical separate output names include debug and doc.

It's advised to separate outputs only when you've shown it's worth it: if the output size is significant (compare with guix size) or in case the package is modular.

Build system arguments

The arguments is a keyword-value list used to configure the build process.

The simplest argument #:tests? can be used to disable the test suite when building the package. This is mostly useful when the package does not feature any test suite. It's strongly recommended to keep the test suite on if there is one.

Another common argument is :make-flags, which specifies a list of flags to append when running make, as you would from the command line. For instance, the following flags

#:make-flags (list (string-append "prefix=" (assoc-ref %outputs "out"))
                   "CC=gcc")

translate into

$ make CC=gcc prefix=/gnu/store/...-<out>

This sets the C compiler to gcc and the prefix variable (the installation directory in Make parlance) to (assoc-ref %outputs "out"), which is a build-stage global variable pointing to the destination directory in the store (something like /gnu/store/...-my-libgit2-20180408).

Similarly, it's possible to set the "configure" flags.

#:configure-flags '("-DUSE_SHA1DC=ON")

The %build-inputs variable is also generated in scope. It's an association table that maps the input names to their store directories.

The phases keyword lists the sequential steps of the build system. Typically phases include unpack, configure, build, install and check. To know more about those phases, you need to work out the appropriate build system definition in $GUIX_CHECKOUT/guix/build/gnu-build-system.scm:

(define %standard-phases
  ;; Standard build phases, as a list of symbol/procedure pairs.
  (let-syntax ((phases (syntax-rules ()
                         ((_ p ...) `((p . ,p) ...)))))
    (phases set-SOURCE-DATE-EPOCH set-paths install-locale unpack
            bootstrap
            patch-usr-bin-file
            patch-source-shebangs configure patch-generated-file-shebangs
            build check install
            patch-shebangs strip
            validate-runpath
            validate-documentation-location
            delete-info-dir-file
            patch-dot-desktop-files
            install-license-files
            reset-gzip-timestamps
            compress-documentation)))

Or from the REPL:

> (add-to-load-path "/path/to/guix/checkout")
> ,module (guix build gnu-build-system)
> (map first %standard-phases)
(set-SOURCE-DATE-EPOCH set-paths install-locale unpack bootstrap
patch-usr-bin-file patch-source-shebangs configure
patch-generated-file-shebangs build check install patch-shebangs strip
validate-runpath validate-documentation-location delete-info-dir-file
patch-dot-desktop-files install-license-files reset-gzip-timestamps
compress-documentation)

If you want to know more about what happens during those phases, consult the associated procedures.

For instance, as of this writing the definition of unpack for the GNU build system is

(define* (unpack #:key source #:allow-other-keys)
  "Unpack SOURCE in the working directory, and change directory within the
source.  When SOURCE is a directory, copy it in a sub-directory of the current
working directory."
  (if (file-is-directory? source)
      (begin
        (mkdir "source")
        (chdir "source")

        ;; Preserve timestamps (set to the Epoch) on the copied tree so that
        ;; things work deterministically.
        (copy-recursively source "."
                          #:keep-mtime? #t))
      (begin
        (if (string-suffix? ".zip" source)
            (invoke "unzip" source)
            (invoke "tar" "xvf" source))
        (chdir (first-subdirectory "."))))
  #t)

Note the chdir call: it changes the working directory to where the source was unpacked. Thus every phase following the unpack will use the source as a working directory, which is why we can directly work on the source files. That is to say, unless a later phase changes the working directory to something else.

We modify the list of %standard-phases of the build system with the modify-phases macro as per the list of specified modifications, which may have the following forms:

  • (add-before PHASE NEW-PHASE PROCEDURE): Run PROCEDURE named NEW-PHASE before PHASE.
  • (add-after PHASE NEW-PHASE PROCEDURE): Same, but afterwards.
  • (replace PHASE PROCEDURE).
  • (delete PHASE).

The PROCEDURE supports the keyword arguments inputs and outputs. Each input (whether native, propagated or not) and output directory is referenced by their name in those variables. Thus (assoc-ref outputs "out") is the store directory of the main output of the package. A phase procedure may look like this:

(lambda* (#:key inputs outputs #:allow-other-keys)
  (let (((bash-directory (assoc-ref inputs "bash"))
         (output-directory (assoc-ref outputs "out"))
         (doc-directory (assoc-ref outputs "doc"))
  ; ...
  #t)

The procedure must return #t on success. It's brittle to rely on the return value of the last expression used to tweak the phase because there is no guarantee it would be a #t. Hence the trailing #t to ensure the right value is returned on success.

Code staging

The astute reader may have noticed the quasi-quote and comma syntax in the argument field. Indeed, the build code in the package declaration should not be evaluated on the client side, but only when passed to the Guix daemon. This mechanism of passing code around two running processes is called code staging.

"Utils" functions

When customizing phases, we often need to write code that mimics the equivalent system invocations (make, mkdir, cp, etc.) commonly used during regular "Unix-style" installations.

Some like chmod are native to Guile. See the Guile reference manual for a complete list.

Guix provides additional helper functions which prove especially handy in the context of package management.

Some of those functions can be found in $GUIX_CHECKOUT/guix/guix/build/utils.scm. Most of them mirror the behaviour of the traditional Unix system commands:

  • which: Like the which system command.
  • find-files: Akin to the find system command.
  • mkdir-p: Like mkdir -p, which creates all parents as needed.
  • install-file: Similar to install when installing a file to a (possibly non-existing) directory. Guile has copy-file which works like cp.
  • copy-recursively: Like cp -r.
  • delete-file-recursively: Like rm -rf.
  • invoke: Run an executable. This should be used instead of system*.
  • with-directory-excursion: Run the body in a different working directory, then restore the previous working directory.
  • substitute*: A "sed-like" function.

Module prefix

The license in our last example needs a prefix: this is because of how the license module was imported in the package, as #:use-module ((guix licenses) #:prefix license:). The Guile module import mechanism gives the user full control over namespacing: this is needed to avoid clashes between, say, the zlib variable from licenses.scm (a license value) and the zlib variable from compression.scm (a package value).

Other build systems

What we've seen so far covers the majority of packages using a build system other than the trivial-build-system. The latter does not automate anything and leaves you to build everything manually. This can be more demanding and we won't cover it here for now, but thankfully it is rarely necessary to fall back on this system.

For the other build systems, such as ASDF, Emacs, Perl, Ruby and many more, the process is very similar to the GNU build system except for a few specialized arguments.

Learn more about build systems in

Programmable and automated package definition

We can't repeat it enough: having a full-fledged programming language at hand empowers us in ways that reach far beyond traditional package management.

Let's illustrate this with some awesome features of Guix!

Recursive importers

You might find some build systems good enough that there is little to do at all to write a package, to the point that it becomes repetitive and tedious after a while. A raison d'être of computers is to replace human beings at those boring tasks. So let's tell Guix to do this for us and create the package definition of an R package from CRAN (the output is trimmed for conciseness):

$ guix import cran --recursive walrus

(define-public r-mc2d
    ; ...
    (license gpl2+)))

(define-public r-jmvcore
    ; ...
    (license gpl2+)))

(define-public r-wrs2
    ; ...
    (license gpl3)))

(define-public r-walrus
  (package
    (name "r-walrus")
    (version "1.0.3")
    (source
      (origin
        (method url-fetch)
        (uri (cran-uri "walrus" version))
        (sha256
          (base32
            "1nk2glcvy4hyksl5ipq2mz8jy4fss90hx6cq98m3w96kzjni6jjj"))))
    (build-system r-build-system)
    (propagated-inputs
      `(("r-ggplot2" ,r-ggplot2)
        ("r-jmvcore" ,r-jmvcore)
        ("r-r6" ,r-r6)
        ("r-wrs2" ,r-wrs2)))
    (home-page "https://github.com/jamovi/walrus")
    (synopsis "Robust Statistical Methods")
    (description
      "This package provides a toolbox of common robust statistical tests, including robust descriptives, robust t-tests, and robust ANOVA.  It is also available as a module for 'jamovi' (see <https://www.jamovi.org> for more information).  Walrus is based on the WRS2 package by Patrick Mair, which is in turn based on the scripts and work of Rand Wilcox.  These analyses are described in depth in the book 'Introduction to Robust Estimation & Hypothesis Testing'.")
    (license gpl3)))

The recursive importer won't import packages for which Guix already has package definitions, except for the very first.

Not all applications can be packaged this way, only those relying on a select number of supported systems. Read about the full list of importers in the guix import section of the manual.

Automatic update

Guix can be smart enough to check for updates on systems it knows. It can report outdated package definitions with

$ guix refresh hello

In most cases, updating a package to a newer version requires little more than changing the version number and the checksum. Guix can do that automatically as well:

$ guix refresh hello --update

Inheritance

If you've started browsing the existing package definitions, you might have noticed that a significant number of them have a inherit field:

(define-public adwaita-icon-theme
  (package (inherit gnome-icon-theme)
    (name "adwaita-icon-theme")
    (version "3.26.1")
    (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnome/sources/" name "/"
                                  (version-major+minor version) "/"
                                  name "-" version ".tar.xz"))
              (sha256
               (base32
                "17fpahgh5dyckgz7rwqvzgnhx53cx9kr2xw0szprc6bnqy977fi8"))))
    (native-inputs
     `(("gtk-encode-symbolic-svg" ,gtk+ "bin")))))

All unspecified fields are inherited from the parent package. This is very convenient to create alternative packages, for instance with different source, version or compilation options.

Getting help

Sadly, some applications can be tough to package. Sometimes they need a patch to work with the non-standard filesystem hierarchy enforced by the store. Sometimes the tests won't run properly. (They can be skipped but this is not recommended.) Other times the resulting package won't be reproducible.

Should you be stuck, unable to figure out how to fix any sort of packaging issue, don't hesitate to ask the community for help.

See the Guix homepage for information on the mailing lists, IRC, etc.

Conclusion

This tutorial was an showcase of the sophisticated package management that Guix boasts. At this point we have mostly restricted this introduction to the gnu-build-system which is a core abstraction layer on which more advanced abstractions are based.

Now where do we go from here? Next we ought to dissect the innards of the build system by removing all abstractions, using the trivial-build-system: this should give us a thorough understanding of the process before investigating some more advanced packaging techniques and edge cases.

Other features worth exploring are the interactive editing and debugging capabilities of Guix provided by the Guile REPL.

Those fancy features are completely optional and can wait; now is a good time to take a well-deserved break. With what we've introduced here you should be well armed to package lots of programs. You can get started right away and hopefully we will see your contributions soon!

References

Notices

CC-BY-SA

This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

About GNU Guix

GNU Guix is a transactional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and respects the user's freedom.

In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native Guile modules, using extensions to the Scheme language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable.

GuixSD can be used on an i686, x86_64, ARMv7, and AArch64 machines. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and aarch64.

10 October, 2018 02:00PM by Pierre Neidhardt

GNU Guile

GNU Guile 2.9.1 (beta) released

We are delighted to announce GNU Guile 2.9.1, the first beta release in preparation for the upcoming 3.0 stable series.

This release adds support for just-in-time (JIT) native code generation, speeding up all Guile programs. Currently support is limited to x86-64 platforms, but will expand to all architectures supported by GNU Lightning.

GNU Guile 2.9.1 is a beta release, and as such offers no API or ABI stability guarantees. Users needing a stable Guile are advised to stay on the stable 2.2 series.

See the release announcement for full details and a download link. Happy hacking, and please do any bugs you might find to [email protected].

10 October, 2018 09:23AM by Andy Wingo ([email protected])

October 09, 2018

Parabola GNU/Linux-libre

Important notice for OpenRC users on i686

The newest version of PAM has an unspecified dependency on the 'audit' package. Upgrading that package today causes su and sudo to fail and makes logins impossible.

To avoid any trouble, you should explicitly install the 'audit' package before attempting to upgrade the system. If you upgrade without first installing the 'audit' package, then you will need to chroot into the system and install it.

09 October, 2018 11:30PM by bill auger

October 04, 2018

GNU Guix

Join GNU Guix through Outreachy

We are happy to announce that for the second time this year, GNU Guix offers a three-month internship through Outreachy, the inclusion program for groups traditionally underrepresented in free software and tech. We currently propose one subject to work on:

  1. Create user video documentation for GNU Guix.

Eligible persons should apply by November 22th.

If you’d like to contribute to computing freedom, Scheme, functional programming, or operating system development, now is a good time to join us. Let’s get in touch on the mailing lists and on the #guix channel on the Freenode IRC network!

About GNU Guix

GNU Guix is a transactional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and respects the user's freedom.

In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native Guile modules, using extensions to the Scheme language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable.

GuixSD can be used on i686, x86_64, and armv7 machines. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and aarch64.

04 October, 2018 08:00AM by Gábor Boskovits

October 03, 2018

FSF Events

John Sullivan - "How can free communication tools win?" (freenode #live, Bristol, UK)

FSF executive director John Sullivan will be speaking at freenode #live (2018-11-03–4).

The free software movement aims to have all software be free “as in freedom.” But communication tools are especially important, because they are fundamental to the movement’s infrastructure, and its self image. We are supposed to be the experts in distributed, online collaboration. Communication and collaboration tools are also where we have had some of our greatest disappointments and challenges in recent years – consider the popularity and subsequent network effects of tools like Skype, Slack, WhatsApp, and Facebook Messenger. Can free tools – IRC, XMPP, GNU Ring, WebRTC, and others – overcome or even just compete with the network effect of the proprietary platforms? If so, how? What’s the current state of affairs and what should we be focusing on?

Location: We The Curious (formerly At-Bristol Science Centre) , Bristol, UK

We hope you can attend the speech, or meet John at the conference, or visit us at the FSF booth.

Please fill out our contact form, so that we can contact you about future events in and around Bristol.

03 October, 2018 04:55PM

September 29, 2018

GNU Guix

Upcoming Talk: "Everyday Use of GNU Guix"

At SeaGL 2018, Chris Marusich will present a talk introducing GNU Guix to people of all skill levels and backgrounds. SeaGL is an annual GNU/Linux conference in Seattle. Attendance is gratis.

If you're in the Seattle area, please consider coming! Even if you can't make it in person, the talk will be recorded and later made available on the SeaGL website, so you can watch it at your convenience after it's been uploaded.

Abstract

Everyday Use of GNU Guix

In this talk, I will introduce GNU Guix: a liberating, dependable, and hackable package manager that follows the "purely functional software deployment model" pioneered by Nix.

I will demonstrate some common use cases of Guix and show you how I use it in my everyday life. In addition, I will briefly explain the basic idea behind the functional model and how it enables Guix to provide useful features like the following:

  • Transactional upgrades and roll-back of installed software.
  • Unprivileged users can simultaneously install multiple versions of software.
  • Transparently build from source or download pre-built binaries.
  • Installed software is bootstrappable, trustable, and auditable all the way down to your compiler's compiler.
  • Eliminates an entire class of "works on my system" type problems.

No prior knowledge of Guix, Nix, or the functional model is required. When you leave this talk, I hope you will have a basic understanding of what Guix is, how to use it, and why it will help make your life brighter.

Schedule

The talk will take place at the following time and location:

For details, please refer to the official SeaGL page for the talk.

About GNU Guix

GNU Guix is a transactional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and respects the user's freedom.

In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native Guile modules, using extensions to the Scheme language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable.

GuixSD can be used on an i686, x86_64 and armv7 machines. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and aarch64.

29 September, 2018 03:00PM by Chris Marusich

Riccardo Mottola

first release of StepSync!

I'm proud to announce the first release of StepSync, a file sync tool for GNUstep and MacOS (even for venerable PowerPC).

StepSync allows synchronization of folders, optionally recursively descending in sub-folders. It allows thus various options of performing backups: pure insertion, updates and including full synchronization by importing changes from target to source.

After months of development and testing, I consider it stable enough, I tested it with thousands of files and folders.

You can find it at the GNUstep Application Project. I already have plans for new features!

29 September, 2018 11:04AM by Riccardo ([email protected])

September 25, 2018

dico @ Savannah

Version 2.7

Version 2.7 of GNU dico is available for download.

Important changes in this version:

1. Support for virtual databases
2. The dictorg module improved
3. Support for building with WordNet on Debian-based systems
4. Default m4 quoting characters changed to [ ]
5. Dicoweb: graceful handling of unsupported content types.

25 September, 2018 04:27PM by Sergey Poznyakoff

September 22, 2018

parallel @ Savannah

GNU Parallel 20180922 ('Danske') released [stable]

GNU Parallel 20180922 ('Danske') [stable] has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/

No new functionality was introduced so this is a good candidate for a stable release.

Quote of the month:

I know I'm late to the party but GNU Parallel is truly amazing!
-- Sam Diaz-Munoz @sociovirology

New in this release:

  • Minix is supported again.
  • Bug fixes and man page updates.

Get the book: GNU Parallel 2018 http://www.lulu.com/shop/ole-tange/gnu-parallel-2018/paperback/product-23558902.html

GNU Parallel - For people who live life in the parallel lane.

About GNU Parallel

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.

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.

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.

You can find more about GNU Parallel at: http://www.gnu.org/s/parallel/

You can install GNU Parallel in just 10 seconds with: (wget -O - pi.dk/3 || curl pi.dk/3/) | bash

Watch the intro video on http://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

Walk through the tutorial (man parallel_tutorial). Your commandline will love you for it.

When using programs that use GNU Parallel to process data for publication please cite:

O. Tange (2018): GNU Parallel 2018, March 2018, https://doi.org/10.5281/zenodo.1146014.

If you like GNU Parallel:

  • Give a demo at your local user group/team/colleagues
  • Post the intro videos on Reddit/Diaspora*/forums/blogs/ Identi.ca/Google+/Twitter/Facebook/Linkedin/mailing lists
  • Get the merchandise https://gnuparallel.threadless.com/designs/gnu-parallel
  • Request or write a review for your favourite blog or magazine
  • Request or build a package for your favourite distribution (if it is not already there)
  • Invite me for your next conference

If you use programs that use GNU Parallel for research:

  • Please cite GNU Parallel in you publications (use --citation)

If GNU Parallel saves you money:

About GNU SQL

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

The database is addressed using a DBURL. If commands are left out you will get that database's interactive shell.

When using GNU SQL for a publication please cite:

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

About GNU Niceload

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.

22 September, 2018 09:15PM by Ole Tange

September 20, 2018

Parabola GNU/Linux-libre

Server loss

The rather long outage (2018-08-27 through 2018-09-18; 22 days) of the proton.parabola.nu server has been resolved, with all services being migrated to winston.parabola.nu. Please notify us if you encounter any lingering issues.

We'd like to specifically thank Jonathan "n1md4" Gower for graciously hosting us at Positive Internet all these years--since before most of us were even Parabola users, let alone contributors.

However, that sponsorship has come to an end. We are alright for now; the server that 1984 Hosting is sponsoring us with is capable of covering our immediate needs. We are looking for a replacement server and are favoring a proprietor that is a "friend of freedom," if anyone in the community has a suggestion.

20 September, 2018 03:45PM by Luke Shumaker

September 19, 2018

Boot problems with Linux-libre 4.18 on older CPUs

Due to a known bug in upstream Linux 4.18, users with older multi-core x86 CPUs (Core 2 Duo and earlier?) may not correctly boot up with linux-libre 4.18 when using the default clocksource.

If you are affected, and the CPU is new enough to support HPET, you may work around this by adding clocksource=hpet to the kernel command line. GRUB users can accomplish this by inserting GRUB_CMDLINE_LINUX_DEFAULT+=" clocksource=hpet" in to /etc/default/grub and re-running grub-mkconfig.

If your CPU is too old to support HPET, you may work around this by using the linux-libre-lts (4.14) kernel instead of linux-libre (4.18).

As this is fixed in 4.18.9, you may also want to wait for a package update.

19 September, 2018 09:33PM by Luke Shumaker

September 17, 2018

FSF News

FSF takes international day of action for a Day Without DRM on September 18th

On Tuesday, September 18th, there will be two rallies in Boston – one from 12:00pm - 2:00pm at the Boston Public Library at 700 Boylston Street, and one from 6:00pm - 7:00pm in front of the Apple Store at 815 Boylston Street.

DRM is the practice of imposing technological restrictions that control what users can do with digital media. DRM creates a damaged good: it prevents you from doing what would be possible without it. This concentrates control over production and distribution of media, giving DRM peddlers the power to carry out massive digital book-burnings and conduct large-scale surveillance over people's media viewing habits.

Organized by the Defective by Design team, IDAD has occurred annually since 2006. Each year, participants take action through protests, rallies, and the sharing of DRM-free media and materials. Participating nonprofits, activist groups, and companies from around the world include the Electronic Frontier Foundation, Open Rights Group, Public Knowledge, The Document Foundation, and others (for a complete list, see: https://dayagainstdrm.org). These groups will share the message by writing about why DRM is harmful, organizing events, and offering discounts on DRM-free media.

"DRM is a major problem for computer user freedom, artistic expression, free speech, and media," said John Sullivan, executive director of the FSF. "International Day Against DRM has allowed us to, year after year, empower people to rise up together and in one voice declare that DRM is harmful to everyone."

This year's theme is A Day Without DRM – the FSF invites people around the world to avoid DRM for the day. DRM is lurking in many electronic devices we use, both online and offline, and you'll find it everywhere from media files to vehicles. Its impact is echoed in the fight for the Right to Repair and the fight for the right to investigate the software in medical devices. Examples of flagrant DRM abuses include:

  • In a classic example from 2009, Amazon remotely deleted thousands of copies of George Orwell's 1984 from Kindle ebook readers. Given this power, corporations like Amazon could fully disappear a book from existence if they chose, committing a massive digital book-burning. Amazon still has the power to do this, and has remotely deleted at least one user's library since then.

  • A US law called the Digital Millennium Copyright Act (DMCA) makes it illegal to remove DRM from media using widely-available online tools. These policies have a chilling effect among security researchers, those who wish to repair their devices, and anyone who wants to understand how their technologies work.

  • Media companies including Netflix pressured the World Wide Web Consortium to add DRM as a Web standard, normalizing DRM and giving it the opportunity to become even more prevalent.

DRM-supporting companies and device manufacturers claim it makes technology and media more secure, enhances user experience, and protects rights holders. In reality, the technologies behind DRM have been used as a vulnerability since 2005 to attack end-users' computer systems and devices. DRM limits what users can do with their media: access is limited by the whims of rights holders. Rather than protecting people who create media, it protects the interests of large companies that aggregate media.

For a thorough overview of DRM abuses, please visit the Defective by Design FAQ.

About Defective by Design

Defective by Design is an initiative of the Free Software Foundation. It is a participatory and grassroots campaign exposing DRM-encumbered devices and media for what they really are: Defective by Design. It works together with activists and others to eliminate DRM as a threat to innovation in media, reader privacy, and freedom for computer users.

About the Free Software Foundation

The Free Software Foundation, founded in 1985, is dedicated to promoting computer users' right to use, study, copy, modify, and redistribute computer programs. The FSF promotes the development and use of free (as in freedom) software –- particularly the GNU operating system and its GNU/Linux variants –- and free documentation for free software. The FSF also helps to spread awareness of the ethical and political issues of freedom in the use of software, and its Web sites, located at fsf.org and gnu.org, are an important source of information about GNU/Linux. Donations to support the FSF's work can be made at https://donate.fsf.org. Its headquarters are in Boston, MA, USA.

More information about the FSF, as well as important information for journalists and publishers, is at https://www.fsf.org/press.

Media Contacts

Molly de Blanc
Campaigns Manager
Free Software Foundation
+1 (617) 542 5942
[email protected]

17 September, 2018 02:55PM

September 14, 2018

gnuzilla @ Savannah

IceCat 60.2.0 Pre-release

GNUzilla is the GNU version of the Mozilla suite, and GNU IceCat is the GNU version of the Firefox browser. Its main advantage is an ethical one: it is entirely free software. While the Firefox source code from the Mozilla project is free software, they distribute and recommend non-free software as plug-ins and addons. Also their trademark license restricts distribution in ways that hinder freedom 0.

GNU IceCat has multiple practical advantages as well, such as better privacy and security settings, extensive blocking of sites that may track the user's browsing habits, or the inclusion of LibreJS and other extensions that help browse without running non-free javascript.

https://www.gnu.org/software/gnuzilla/

GPG key ID:D7E04784 GNU IceCat releases
Fingerprint: A573 69A8 BABC 2542 B5A0 368C 3C76 EED7 D7E0 4784
https://savannah.gnu.org/project/memberlist-gpgkeys.php?group=gnuzilla

======

This is a pre-release for version 60.2.0 of GNU IceCat, available at http://alpha.gnu.org/gnu/gnuzilla/60.2.0/

This release contains substantial design and usability changes from the previous major version (v52.x ESR) so I'm publishing it at alpha.gnu.org to request testing and comments before moving it to ftp.gnu.org. Source Code plus binaries for GNU/Linux x86 and x86_64 are available.

The main differences (other than those provided from upstream changes from v52.x to v60.x) are:

  • LibreJS 7.x, now based in the WebExtensions API. It currently provides a very similar set of features compared with the version shipped with IceCat 52.x but testing, comments and advice are welcome.
  • A set of companion extensions for LibreJS by Nathan Nichols (https://addons.mozilla.org/en-US/firefox/user/NateN1222/) are pre-installed, and provide workarounds to use some services at USPS, RSF.org, SumOfUs.org, pay.gov, McDonald's, goteo.org and Google Docs without using nonfree JavaScript.
  • A series of configuration changes and tweaks were applied to ensure that IceCat does not initiate network connections that the user has not explicitly requested. This implies not downloading feeds, updates, blacklists or any other similar data needed during startup.
  • A new homepage shows the most important privacy and freedom options available, with explanations for the user to tune IceCat's behavior to their specific needs.
  • We no longer include SpyBlock, which was IceCat's fork of AdBlockPlus that allowed to block all third-party requests during "Private Browsing" mode. Now, we include an extension that blocks all third party requests by default, and provides a simple interface that allows to whitelist specific third-party resources on a per-site basis. This change is the most significant usability change from IceCat 52.x and I'd like to get testers to provide an opinion on it. One of the reasons for its inclusion is that unlike other blockers it doesn't need to download any files to do its job, thus avoiding the previously mentioned unrequested network connections.

Thanks to Giorgio Maone, Nathan Nichols, Nyk Nyby and Zach Wick for their contribution to LibreJS and IceCat, and happy testing!

14 September, 2018 01:55AM by Ruben Rodriguez

September 13, 2018

librejs @ Savannah

LibreJS 7.17 released

GNU LibreJS aims to address the JavaScript problem described in Richard Stallman's article The JavaScript Trap*. LibreJS is a free add-on for GNU IceCat and other Mozilla-based browsers. It blocks nonfree nontrivial JavaScript while allowing JavaScript that is free and/or trivial. * https://www.gnu.org/philosophy/javascript-trap.en.html

The source tarball for this release can be found at:
http://ftp.gnu.org/gnu/librejs/librejs-7.17.0.tar.gz
http://ftp.gnu.org/gnu/librejs/librejs-7.17.0.tar.gz.sig

The installable extension file (compatible with Mozilla-based browsers version >= v60) is available here:
http://ftp.gnu.org/gnu/librejs/librejs-7.17.0.xpi
http://ftp.gnu.org/gnu/librejs/librejs-7.17.0.xpi.sig

GPG key:05EF 1D2F FE61 747D 1FC8 27C3 7FAC 7D26 472F 4409
https://savannah.gnu.org/project/memberlist-gpgkeys.php?group=librejs

This release introduces a new interface for management of the whitelist/blacklist, along with several bug fixes:

  • Temporary hiding complain to owner feature until ready for prime time.
  • Adjust directory layout and packaging to allow Storage.js to be shared with the settings page in the xpi release.
  • Refactored panel visual styles to be reused by the settings page.
  • Support for batch async list operations.
  • Fix navigating the same url with # erases activity report information.

All contributions thanks to Giorgio Maone.

13 September, 2018 09:45PM by Ruben Rodriguez

September 12, 2018

German Arias

New release of FisicaLab for Windows

Due to some problems reported by Windows users, I decide to release a new Windows installer of FisicaLab with the alternative interface using IUP. This version is the number 0.3.5.1 and you can download it here. I will add some new features before release the version 0.4.0. If you have some problem with this new installer please write me.

12 September, 2018 05:26AM by Germán Arias

September 11, 2018

Luca Saiu

Thanks for fighting against the European copyright directive

As I am writing this, the European Parliament is debating the disastrously liberticide copyright Directive. After out previous mailing campaign (The European Parliament has rejected the copyright directive, for now ()) organized along with a group of GNU friends, we again contacted the Members of the European Parliament before the forthcoming vote. I wish to name all the people who helped by translating the text into several languages and improve it, working tirelessly and with very little time: Christopher Dimech, Yavor Doganov, Rafael Fontenelle, Alexandre Garreau, Bruno Haible, José Marchesi, Tom Uijldert. Thank you all, friends. — Luca Saiu, 2018-09-11 21:50 ... [Read more]

11 September, 2018 07:50PM by Luca Saiu ([email protected])

September 09, 2018

guile-cv @ Savannah

Guile-CV version 0.2.0

Guile-CV version 0.2.0 is released! (September 2018)

Changes since the previous version

This is a 'milestone' release, which introduces image texture measures. In addition (a) the default installation locations have changed; (b) there is a new configure option; (c) some new interfaces; (d) matrix multiplication performances have been greatly improved; (d) a few interface (name) have changed.

For a list of changes since the previous version, visit the NEWS file. For a complete description, consult the git summary and git log

09 September, 2018 02:47AM by David Pirotte

September 06, 2018

indent @ Savannah

GNU indent 2.2.12

GNU indent version 2.2.12 (signature) has just been releases, the first release GNU indent saw in eight years.

Highlights include:

  • New options:
    • -pal / --pointer-align-left and -par / --pointer-align-right
    • -fnc / --fix-nested-comment
    • -gts / --gettext-strings
    • -slc / --single-line-conditionals
    • -as / --align-with-spaces
    • -ut / --use-tabs
    • -nut / --no-tabs
    • -sar / --spaces-around-initializers
    • -ntac / --dont-tab-align-comments
  • C99 and C11 keywords and typeof are now recognised.
  • -linux preset now includes -nbs.
  • -kr preset now includes -par.
  • Lots of bug fixes

I’d like to thank all of the contributors of this release, most importantly:

  • Tim Hentenaar for all of the fixes and refactoring he’s done in his branch
  • Petr Písař, who maintains GNU indent in Red Hat and its derivatives, who’s submitted a lot of fixes and kept supporting users on the mailing list when I couldn’t
  • Santiago Vila, who maintains GNU indent in Debian
  • Daniel P. Valentine, who helped me a lot when I initially took over the maintenance of GNU indent
  • And lots of others who submitted their patches

06 September, 2018 11:33AM by Andrej Shadura

September 05, 2018

librejs @ Savannah

LibreJS 7.16 released

GNU LibreJS aims to address the JavaScript problem described in Richard Stallman's article The JavaScript Trap*. LibreJS is a free add-on for GNU IceCat and other Mozilla-based browsers. It blocks nonfree nontrivial JavaScript while allowing JavaScript that is free and/or trivial. * https://www.gnu.org/philosophy/javascript-trap.en.html

The source tarball for this release can be found at:
http://ftp.gnu.org/gnu/librejs/librejs-7.16.0.tar.gz
http://ftp.gnu.org/gnu/librejs/librejs-7.16.0.tar.gz.sig

The installable extension file (compatible with Mozilla-based browsers version >= v60) is available here:
http://ftp.gnu.org/gnu/librejs/librejs-7.16.0.xpi
http://ftp.gnu.org/gnu/librejs/librejs-7.16.0.xpi.sig

GPG key:05EF 1D2F FE61 747D 1FC8 27C3 7FAC 7D26 472F 4409
https://savannah.gnu.org/project/memberlist-gpgkeys.php?group=librejs

The main improvement in version 7.16.0 is the implementation of WebLabels (https://www.fsf.org/blogs/licensing/rel-jslicense), which was the remaining missing feature since LibreJS got reimplemented using the WebExtensions format. On top of that, multiple bugfixes and performance improvements were added. All contributions thanks to Giorgio Maone.

Changes since version 7.15 (excerpt from the git changelog):

Fixes missing feedback for actions on the report UI when in a tab.
Fixes missing feedback on tab reload from UI panel.
Refactored HTML loading, parsing and serialization mechanisms.
Moved external licenses check into response pre-processing
WebLabels-based license checking implementation.
Fix Back/forth navigation not changing tab status information

05 September, 2018 09:40PM by Ruben Rodriguez

FSF News

Eleventh annual LibrePlanet conference set for March 23-24, 2019

The call for proposals is open now, until October 26, 2018. General registration and exhibitor and sponsor registration are also open.

LibrePlanet is an annual conference for free software users and anyone who cares about the intersection of technology and social justice. For a decade, LibrePlanet has brought together thousands of diverse voices and knowledge bases, including free software developers, policy experts, activists, hackers, students, and people who have just begun to learn about free software.

LibrePlanet 2019 will feature sessions for all ages and experience levels, including newcomers. Sharon Woods, general counsel for the Defense Digital Service (US Department of Defense) said, “Last year was my first LibrePlanet... I walked away a complete believer in free software.” In just the last three years, over a thousand people from around the world have attended LibrePlanet, with many more participating online by watching the free software-powered livestream, joining the conversation on IRC, or viewing nearly 40 hours of archived video on the FSF's GNU MediaGoblin instance.

LibrePlanet 2019's theme is "Trailblazing Free Software." In 1983, the free software movement was born with the announcement of the GNU Project. FSF founder Richard Stallman saw the dangers of proprietary code from the beginning: when code was kept secret from users, they would be controlled by the technology they used, instead of vice versa. In contrast, free software emphasized a community-oriented philosophy of sharing code freely, enabling people to understand how the programs they used worked, to build off of each other's code, to pay it forward by sharing their own code, and to create useful software that treated users fairly.

"Every year, ideas are introduced, discussed, and developed at LibrePlanet that advance the free software movement and help technology and associated law actually serve the people using them," said FSF executive director John Sullivan. "People will leave the next edition doubly motivated to chart a path away from dependency on unfree software companies like Facebook, Apple, Uber, and Microsoft, and with new knowledge about tools to help them do so."

When he identified control over one's own computer as a requirement for ethical, trustworthy computing, Stallman anticipated some of the most toxic aspects of today's proprietary software-filled world, including Digital Restrictions Management (DRM), bulk surveillance, and Service as a Software Substitute (SaaSS). With a new and growing generation of free software enthusiasts, we can take this conference as an opportunity to discuss both the present and the future of the free software movement. Using the Four Freedoms as a litmus test for ethical computing, we ask, "How will free software continue to bring to life trailblazing, principled new technologies and new approaches to the world?"

Call for Proposals

LibrePlanet 2019's talks and hands-on workshops can be for developers, young people, newcomers to free software, activists looking for technology that aligns with their ideals, policymakers, hackers, artists, and tinkerers. Potential talks should examine or utilize free software, copyleft, and related issues.

"Each year, newcomers and longtime free software activists of all ages surprise us with unique ideas they propose to explore at LibrePlanet," said Georgia Young, program manager at the FSF. "We are excited to see what trailblazing talk and workshop possibilities people bring to the conference for 2019."

Submissions to the call for proposals are being accepted through Friday, October 26, 2018 at 10:00 EDT (14:00 UTC).

About LibrePlanet

LibrePlanet is the annual conference of the Free Software Foundation. Over the last decade, LibrePlanet has blossomed from a small gathering of FSF members into a vibrant multi-day event that attracts a broad audience of people who are interested in the values of software freedom. To sign up for announcements about LibrePlanet 2019, visit https://www.libreplanet.org/2019.

Each year at LibrePlanet, the FSF presents its annual Free Software Awards. Nominations for the awards are open through Sunday, November 4th, 2018 at 23:59 UTC.

For information on how your company can sponsor LibrePlanet or have a table in our exhibit hall, email [email protected].

LibrePlanet 2018 was held at MIT from March 24-25, 2018. Nearly 350 attendees came together from across the world for workshops and talks centered around the theme of "Freedom Embedded." You can watch videos from last year's conference, including the opening keynote, an exploration of the potential for the free software community to last forever by maintaining its ideals while also welcoming newcomers, by Deb Nicholson, who is now director of community operations for the Software Freedom Conservancy.

About the Free Software Foundation

The Free Software Foundation, founded in 1985, is dedicated to promoting computer users' right to use, study, copy, modify, and redistribute computer programs. The FSF promotes the development and use of free (as in freedom) software -- particularly the GNU operating system and its GNU/Linux variants -- and free documentation for free software. The FSF also helps to spread awareness of the ethical and political issues of freedom in the use of software, and its Web sites, located at fsf.org and gnu.org, are an important source of information about GNU/Linux. Donations to support the FSF's work can be made at https://donate.fsf.org. Its headquarters are in Boston, MA, USA.

More information about the FSF, as well as important information for journalists and publishers, is at https://www.fsf.org/press.

Media Contacts

Georgia Young
Program Manager
Free Software Foundation
+1 (617) 542-5942
[email protected]

05 September, 2018 02:55PM

August 28, 2018

bison @ Savannah

bison-3.1 released [stable]

We are very happy to announce the release of GNU Bison 3.1. It introduces
new features such as typed midrule actions, brings improvements in the
diagnostics, fixes several bugs and portability issues, improves the
examples, and more.

See the NEWS below for more details.

Enjoy!

28 August, 2018 04:28AM by Akim Demaille

August 27, 2018

dico @ Savannah

Version 2.6

New version of GNU dico is available for download. This version introduces support for Guile 2.2 and later, and for Python 3.5 and later. Support for Guile 1.8 has been withdrawn.

27 August, 2018 09:51AM by Sergey Poznyakoff

August 25, 2018

Christopher Allan Webber

Privilege isn't a sin, but it's a responsibility and a debt to be repaid

Recently I was on a private mailing list thread where there was debate about whether or not the project should take on steps to improve diversity. One of the mailing list participants was very upset about this idea, and said that they didn't like when people accused them of the "original sin" of having white male privilege.

I suspect this is at the root of a lot of misunderstanding and frustration around the term "privilege". Privilege is not a sin... you are not a sinner for having privilege. However it is a responsibility and a debt to be repaid and corrected for, stemming from injustices in society.

A popular social narrative is that everyone has an equal place at the starting line, so the winners and losers of a race are equally based on their merit. Unfortunately this isn't true. Privilege is being able to show up at the starting line having had sleep and a good meal and the resources to train... you still worked to be able to get to the finish line and having privilege does not take that away. But if we look at the other people on the track we could see that they not only maybe didn't get enough sleep or were not able to allocate time to train (maybe they had to work multiple jobs on the side) or couldn't afford to eat as healthily. Some of them actually may even have to start back farther from the starting line, there are rocks and weeds and potholes in their paths. If we really want to treat everyone based on merit, we'd have to give everyone an equal place at the starting line, an equal track, etc. Unfortunately, due to the way the race is set up, that does mean needing to correct for some things, and it requires actual effort to repair the track.

My spouse Morgan Lemmer-Webber is an art historian and recently got into free software development (and software development in general). She has faced sexism, as all women do, her entire life, but it was immediately more visible and severe once she entered the technology space. For example, she wrote a web application for her work at the university. I helped train her, but I refused to write any code because I wanted her to learn, and she did. Eventually the project got larger and she became a manager and hired someone whom she was to train to take over development. He took a look at the code, emailed her and said "Wow, this file looks really good, I assume your husband must have written this code?"

What a thing to say! Can you imagine how that must have felt? If I heard something like that said to me I'd want to curl up in a ball and die. And she had more experiences like this too, experiences she never had until she entered the technology space. And if you talk to women in this field, you'll hear these stories are common, and more: dismissal, harassment, rape threats if you become too visible or dare to speak out... not to mention there's the issue that most of the people in tech don't look like you, so you wonder if you really actually belonged, and you wonder if everyone else believes that too. Likewise with people of color, likewise with people in the LGBTQ space... stones and disrepair on the path, and sometimes you have to start a bit farther back.

To succeed at the race with privilege, of course you have to work hard. You have to train, you have to dedicate yourself, you have to run hard. This isn't meant to take away your accomplishments, or to say you didn't work hard. You did! It's to say that others have all these obstacles that we need to help clear from their path. No wonder so many give up the race. And there comes the responsibility and debt to be repaid: if you have privilege, put it to good work: pitch in. If you want that dream of everyone to have an equal place at the starting line to be true, help fix the track. But there's a lot of damage there... it's going to take a long time.

25 August, 2018 12:50PM by Christopher Lemmer Webber

August 22, 2018

parallel @ Savannah

GNU Parallel 20180822 ('Genova') released

GNU Parallel 20180822 ('Genova') has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/

Quote of the month:

GNU parallel is a thing of magic.

-- Josh Meyer @joshmeyerphd@twitter

New in this release:

  • parset sets exit code.
  • Bug fixes and man page updates.

GNU Parallel - For people who live life in the parallel lane.

About GNU Parallel

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.

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.

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.

You can find more about GNU Parallel at: http://www.gnu.org/s/parallel/

You can install GNU Parallel in just 10 seconds with: (wget -O - pi.dk/3 || curl pi.dk/3/) | bash

Watch the intro video on http://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

Walk through the tutorial (man parallel_tutorial). Your commandline will love you for it.

When using programs that use GNU Parallel to process data for publication please cite:

O. Tange (2018): GNU Parallel 2018, April 2018, https://doi.org/10.5281/zenodo.1146014.

If you like GNU Parallel:

  • Give a demo at your local user group/team/colleagues
  • Post the intro videos on Reddit/Diaspora*/forums/blogs/ Identi.ca/Google+/Twitter/Facebook/Linkedin/mailing lists
  • Get the merchandise https://gnuparallel.threadless.com/designs/gnu-parallel
  • Request or write a review for your favourite blog or magazine
  • Request or build a package for your favourite distribution (if it is not already there)
  • Invite me for your next conference

If you use programs that use GNU Parallel for research:

  • Please cite GNU Parallel in you publications (use --citation)

If GNU Parallel saves you money:

About GNU SQL

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

The database is addressed using a DBURL. If commands are left out you will get that database's interactive shell.

When using GNU SQL for a publication please cite:

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

About GNU Niceload

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.

22 August, 2018 10:55PM by Ole Tange

August 21, 2018

Parabola GNU/Linux-libre

unar being replaced by unarchiver

The unar package has been dropped in favor of Arch's unarchiver. This was discussed in the mailing list some months ago.

If you are using unar, just install unarchiver. You'll be asked if you want to replace it, just accept and continue as any normal package installation.

21 August, 2018 02:43AM by David P.

August 17, 2018

Riccardo Mottola

Graphos 0.7 released

Graphos 0.7 has been released a couple of days ago!

What's new for GNUstep's vector editor?
  • improved Bezier path editor (add/remove points)
  • Knife (Bezier Path splitting) instrument fixed and re-enabled (broken since original GDraw import!)
  • important crash fixes (Undo/Redo related)
  • Interface improvements to be more usable with Tablet/Pen digitizer.
Graphos continues to work on GNUstep for Linux/BSD as well as natively on MacOS.

Graphos running on MacOS:

17 August, 2018 08:58PM by Riccardo ([email protected])

August 15, 2018

Parabola GNU/Linux-libre

netctl 1.18-1 and systemd 239.0-2.parabola7 may require manual intervention

The new versions of netctl and systemd-resolvconf may not be installed together. Users who have both netctl and systemd-resolvconf installed will need to manually switch to from systemd-resolvconf to openresolv before upgrading.

If you get an error

:: unable to satisfy dependency 'resolvconf' required by netctl

use

pacman -S openresolv

prior to upgrading.

15 August, 2018 05:05PM by Luke Shumaker

August 14, 2018

GNUnet News

GSoC 2018 - GNUnet Web-based User Interface

What was done?
In the context of Google Summer of Code 2018, my mentor (Martin Schanzenbach) and I have worked on creating and extending the REST API of GNUnet. Currently, we mirrored the functionality of following commands:

gnunet-identity
gnunet-namestore
gnunet-gns
gnunet-peerinfo

Additionally, we developed a website with the Javascript framework Angular 6 and the design framework iotaCSS to use the new REST API. The REST API of GNUnet is now documented with Sphinx.

14 August, 2018 07:55AM by Phil Buschmann

August 13, 2018

GNU Guix

GSoC 2018 report: Cuirass Web interface

For the last three months I have been working with the Guix team as a Google Summer of Code intern. The title of my project is "GNU Guix (Cuirass): Adding a web interface similar to the Hydra web interface".

Cuirass is a continuous integration system which monitors the Guix git repository, schedules builds of Guix packages, and presents the build status of all Guix packages. Before my project, Cuirass did not have a web interface. The goal of the project was to implement an interface for Cuirass which would allow a user to view the overall build progress, details about evaluations, build failures, etc. The web interface of Hydra is a good example of such a tool.

In this post, I present a final report on the project. The Cuirass repository with the changes made during the project is located at http://git.savannah.gnu.org/cgit/guix/guix-cuirass.git. A working instance of the implemented interface is available at https://berlin.guixsd.org/. You can find more examples and demonstrations of the achieved results below.

About Cuirass

Cuirass is designed to monitor a git repository containing Guix package definitions and build binaries from these package definitions. The state of planned builds is stored in a SQLite database. The key concepts of the Cuirass internal state are:

  • Job specification. Specifications state what has actually to be done by Cuirass. A specification is defined by a Scheme data structure (an association list) which includes a job name, repository URL, as well as the branch and a procedure proc that specifies how this is to be built.

  • Evaluation. An evaluation is a high-level build action related to a certain revision of a repository of a given specification. For each specification, Cuirass continuously produces new evaluations which build different versions of the project represented by revisions of the corresponding repository. Derivations and builds (see below) each belong to a specific evaluation.

  • Derivation. Derivations represent low-level build actions. They store such information as name of a build script and its arguments, input and output of a build action, target system type, and necessary environment variables.

  • Build. A build is a result of build actions that are prescribed by a derivation. This could be a failed build or a directory containing the files that were generated by compiling a package.

Besides the core which executes build actions and records their results in the database, Cuirass includes a web server which previously only responded to a handful of API requests with JSON containing information about the current status of builds.

Web interface

The Cuirass web interface implemented during the project is served by the Cuirass web server whose functionality has been extended to generating HTML responses and serving static files. General features of the interface are listed below.

  • The backend is written in Guile and implements request processing procedures which parse request parameters and extract specific data to be displayed from the database.

  • The frontend consists of HTML templates represented with Guile SXML and the Bootstrap 4 CSS library.

  • The appearance is minimalistic. Every page includes only specific content information and basic navigation tools.

  • The interface is lightweight and widely accessible. It does not use JavaScript which makes it available to users who do not want to have JavaScript running in the browser.

Structure

Let's review the structure of the interface and take a look at the information you can find in it. Note that the web-interface screenshots presented below were obtained with synthetic data loaded into Cuirass database.

Main page

The main page is accessible on the root request endpoint (/). The main page displays a list of all the specifications stored in the Cuirass database. Each entry of the list is a clickable link which leads to a page about the evaluations of the corresponding specification (see below).

Here is an example view of the main page.

Main page screenshot

Evaluations list

The evaluations list of a given specification with name <name> is located at /jobset/<name>/. On this page, you can see a list of evaluations of the given project starting from the most recent ones. You can navigate to older evaluations using the pagination buttons at the bottom of the page. In the table, you can find the following information:

  • The ID of the evaluation which is clickable and leads to a page with information about all builds of the evaluation (see below).

  • List of commits corresponding to the evaluation.

  • Build summary of the evaluation: number of succeeded (green), failed (red), and scheduled (grey) builds of this evaluation. You can open the list of builds with a certain status by clicking on one of these three links.

Here is a possible view of the evaluations list page:

Screenshoot of evaluations list

Builds list

The builds list of a evaluation with ID <id> is located at /eval/<id>/. On this page, you can see a list of builds of the given evaluation ordered by their stop time starting from the most recent one. Similarly to the evaluation list, there are pagination buttons located at the bottom of the page. For each build in the list, there is information about the build status (succeeded, failed, or scheduled), stop time, nixname (name of the derivation), system, and also a link to the corresponding build log. As said above, it is possible to filter builds with a certain status by clicking on the status link in the evaluations list.

Screenshot of builds list

Summary

Cuirass now has the web interface which makes it possible for users to get an overview on the status of Guix package builds in a user-friendly way. As the result of my GSoC internship, the core of the web interface was developed. Now there are several possibilities for future improvements and I would like to welcome everyone to contribute.

It was a pleasure for me to work with the Guix team. I would like to thank you all for this great experience! Special thanks to my GSoC mentors: Ricardo Wurmus, Ludovic Courtès, and Gábor Boskovits, and also to Clément Lassieur and Danny Milosavljevic for their guidance and help throughout the project.

13 August, 2018 03:00PM by Tatiana Sholokhova

libredwg @ Savannah

libredwg-0.6 released [alpha]

See https://www.gnu.org/software/libredwg/

API breaking changes:
* Removed dwg_obj_proxy_get_reactors(), use dwg_obj_get_reactors() instead.
* Renamed SORTENTSTABLE.owner_handle to SORTENTSTABLE.owner_dict.
* Renamed all -as-rNNNN program options to --as-rNNNN.

Other newsworthy changes:
* Removed all unused type-specific reactors and xdicobjhandle fields,
use the generic object and entity fields instead.
* Added signed BITCODE_RLd and BITCODE_BLd (int32_t) types.
* Added unknown_bits field to all UNSTABLE/DEBUGGING classes.
* Custom CFLAGS are now honored.
* Support for GNU parallel and coreutils timeout logfile and picat processing.

Important bugfixes:
* Fixed previously empty strings for r2007+ for some objects and entities (#34).
* Fixed r2010+ picture size calculation (DXF 160, 310), leading to wrong entity offsets.
* Added more checks for unstable objects: empty handles, controls, overflows, isnan.
* Fixed some common_entity_data, mostly with non-indexed colors and gradient filled HATCH
(#27, #28, #31)
* Fixed some proper relative handles, which were previously treated as NULL handle.
* Fixed writing TV strings, now the length includes the final \0 char.
* Fixed the initial minimal hash size, fixing an endless loop on very small
(truncated) DWG's (<1000 bytes).
* Much less memory leaks.
* Improved free, i.e. no more double free with EED data. (#33)
* Better perl bindings build support on Windows, prefer local dwg.h over
installed dwg.h on testing (#29).
* Fixed dejagnu compilation on C11 by using -fgnu89-inline (#2)

New features:
* Added unstable support for the objects ASSOCDEPENDENCY, ASSOCPLANESURFACEACTIONBODY,
DBCOLOR, DIMASSOC, DYNAMICBLOCKPURGEPREVENTER, HELIX, LIGHT, PERSSUBENTMANAGER,
UNDERLAYDEFINITION and the entities MULTILEADER, UNDERLAY.
* Added getopt_long() support to all programs, position independent options.
* Implemented examples/unknown to find field layouts of unknown objects.
With bd and bits helpers to decode unknowns.
Now with a http://picat-lang.org helper. See also HACKING and savannah News.
* Implemented parsing ACIS version 2 to the binary SAB format.
* Added all missing dwg_object_to_OBJECT() functions for objects.
* Added dwg_ent_minsert_set_num_cols(), dwg_ent_minsert_set_num_rows()
* Added --disable-dxf, --enable--debug configure options. With debug there are many
more unstable objects available.
* Added libredwg.pc (#30)
* Added valgrind supressions for known darwin/glibc leaks.
* Changed and clarified the semver version numbering on development checkouts with
major.minor[.patch[.build.nonmastercommits-gittag]]. See HACKING.

Here are the compressed sources:
http://ftp.gnu.org/gnu/libredwg/libredwg-0.6.tar.gz (9.4MB)
http://ftp.gnu.org/gnu/libredwg/libredwg-0.6.tar.xz (3.5MB)

https://github.com/LibreDWG/libredwg/releases/tag/0.6 (also window binaries)

Here are the GPG detached signatures[*]:
http://ftp.gnu.org/gnu/libredwg/libredwg-0.6.tar.gz.sig
http://ftp.gnu.org/gnu/libredwg/libredwg-0.6.tar.xz.sig

Use a mirror for higher download bandwidth:
https://www.gnu.org/order/ftp.html

Here are the SHA256 checksums:

995da379a27492646867fb490ee406f18049f145d741273e28bf1f38cabc4d5c libredwg-0.6.tar.gz
6d525ca849496852f62ad6a11b7b801d0aafd1fa1366c45bdb0f11a90bd6f878 libredwg-0.6.tar.xz
21d9619c6858ea25f95a9b6d8d6946e387309023ec17810f4433d8f61e8836af libredwg-0.6-win32.zip
d029d35715b8d86a68f8dacc7fdb5a5ac6405bc0a1b3457e75fc49c6c4cf6e06 libredwg-0.6-win64.zip

[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact. First, be sure to download both the .sig file
and the corresponding tarball. Then, run a command like this:

gpg --verify libredwg-0.6.tar.gz.sig

If that command fails because you don't have the required public key,
then run this command to import it:

gpg --keyserver keys.gnupg.net --recv-keys B4F63339E65D6414

and rerun the 'gpg --verify' command.

13 August, 2018 09:48AM by Reini Urban

August 11, 2018

GNUnet News

irc bot status

As of 2018-08-09 in the early morning, we are having problems with our current IRC bot.
update 2018-08-13: I have started working on a replacement - the drupal bot is not coming back.
We have plans to migrate to a new bot as soon as possible, but hope to restore functionality to the existing one soon enough.

This post will be updated as soon as the bot is back online. The logs themselves are not affected.

We apologize for any inconvenience.

11 August, 2018 05:30PM by ng0

unifont @ Savannah

Unifont 11.0.02 Released

10 August 2018

Unifont 11.0.02 is now available. This is an interim release, with another released planned in the autumn of 2018. The main addition in this release is David Corbett's contribution of the over 600 glyphs in the Sutton SignWriting Unicode block.

Download this release at:

https://ftpmirror.gnu.org/unifont/unifont-11.0.02/

or if that fails,

ftp://ftp.gnu.org/gnu/unifont/unifont-11.0.02/

Enjoy!

Paul Hardy

11 August, 2018 01:53PM by Paul Hardy

August 07, 2018

librejs @ Savannah

LibreJS 7.15 released

GNU LibreJS aims to address the JavaScript problem described in Richard Stallman's article The JavaScript Trap*. LibreJS is a free add-on for GNU IceCat and other Mozilla-based browsers. It blocks nonfree nontrivial JavaScript while allowing JavaScript that is free and/or trivial. * https://www.gnu.org/philosophy/javascript-trap.en.html

The source tarball for this release can be found at:
http://ftp.gnu.org/gnu/librejs/librejs-7.15.0.tar.gz
http://ftp.gnu.org/gnu/librejs/librejs-7.15.0.tar.gz.sig

The installable extension file (compatible with Mozilla-based browsers version >= v60) is available here:
http://ftp.gnu.org/gnu/librejs/librejs-7.15.0.xpi
http://ftp.gnu.org/gnu/librejs/librejs-7.15.0.xpi.sig

GPG key:05EF 1D2F FE61 747D 1FC8 27C3 7FAC 7D26 472F 4409
https://savannah.gnu.org/project/memberlist-gpgkeys.php?group=librejs

Version 7.15 includes a partial rework of the mechanism for script loading and parsing, improving performance, reliability and code maintainability. The release also adds the implementation of per-script white/blacklisting, and many smaller bugfixes. All contributions thanks to the work of Giorgio Maone.

Changes since version 7.14 (excerpt from the git changelog):

Fixed whitelisting of scripts with query strings in URL.
Fixed report attempts when no tabId is available.
UI rewrite for better responsiveness and simplicity.
Broader detection of UTF-8 encoding in responses.
Fixed badge shouldn't be shown on privileged pages.
Fixed sub-frames resetting badge to green.
Uniform conventions for module importing paths.
Temporarily display back hidden old UI elements.
Refactoring list management in its own class.
Bug fixing and simplifying UI synchronization.
Whitelisted/blackilisted reporting and modification support.
Stateful response processing support.
Implement early whitelisting / blacklisting logic.
Display actual extension version number in UI.
White/Black lists back-end refactoring.
Refactor and fix HTTP response filtering.

07 August, 2018 07:16PM by Ruben Rodriguez