Feeds
Keep warm with GNU winter swag
Web Review, Week 2024-46
Let’s go for my web review for the week 2024-46.
No GPS required: our app can now locate underground trainsTags: tech, mobile, sensors, gps, transportation
Now this is definitely a smart trick to estimate position in tunnels.
https://blog.transitapp.com/go-underground/
Tags: tech, ai, machine-learning, gpt
More signs of the generative AI companies hitting a plateau…
Tags: tech, ai, machine-learning, gpt, data, copyright, licensing
It shouldn’t be, but it is a big deal. Having such training corpus openly available is one of the big missing pieces to build models.
Tags: tech, ai, machine-learning, gpt, foss
This is an interesting and balanced view. Also nice to see that local inference is really getting closer. This is mostly a UI problem now.
https://nullprogram.com/blog/2024/11/10/
Tags: tech, cpu, hardware, security, privacy, research
Fascinating research about side-channel attacks. Learned a lot about them and website fingerprinting here. Also interesting the explanations of how the use of machine learning models can actually get in the way of proper understanding of the side-channel really used by an attack which can prevent developing actually useful counter-measures.
https://jackcook.com/2024/11/09/bigger-fish.html
Tags: tech, linux, security
Nice chain of attacks. This shows more than one vulnerability needs to be leveraged to lead to root access. This provides valuable lessons.
https://snyk.io/blog/abusing-ubuntu-root-privilege-escalation/
Tags: tech, unix, linux, system
The title says it all. This is very fragmented and there are several options to fulfill the task. Knowing the tradeoffs can be handy.
https://gaultier.github.io/blog/way_too_many_ways_to_wait_for_a_child_process_with_a_timeout.html
Tags: tech, databases, algorithm
This is a nice view into how a query planner roughly works and a nice algorithm which can be used internally to properly estimate the number of distinct values in a column.
https://buttondown.com/jaffray/archive/the-cvm-algorithm/
Tags: tech, version-control, git, tools, conflict
Looks like a nice way to improve handling of merge conflicts. I’ll test this one out.
Tags: tech, cloud, complexity, vendor-lockin, self-hosting
Definitely a good post. No you don’t have to go all in with cloud providers and signing with your blood. It’s often much more expensive for little gain but much more complexity and vendor lock in.
https://mkennedy.codes/posts/opposite-of-cloud-native-is-stack-native/
Tags: tech, design, type-systems
Avoiding boolean parameters in library APIs should be a well known advice by now. Still they should probably be avoided when modeling domain types as well.
https://katafrakt.me/2024/11/09/booleans-are-a-trap/
Tags: tech, design, complexity
Good musing about complexity. Very often we need to move it around, the important question is where should it appear. For sure you don’t want it scattered everywhere.
https://notes.billmill.org/link_blog/2024/11/Complex_forWhom.html
Tags: tech, distributed, complexity
Interesting reasoning about what is hard in systems with concurrency. It’s definitely about the state space of the system and the structure of that space.
https://buttondown.com/hillelwayne/archive/what-makes-concurrency-so-hard/
Tags: tech, programming, craftsmanship, engineering, problem-solving
Interesting musing on the heuristics we use when solving problems. There are good advices in there to make progress and become a better developer.
https://grantslatton.com/software-pathfinding
Bye for now!
KDE Gear 24.12 Beta Testing
KDE Gear is our release service for many apps such as mail and calendaring supremo Kontact, geographers dream Marble, social media influencing Kdenlive and dozens of others. KDE needs you to test that your favourite feature has been added and your worst bug has been squished.
You can do this with KDE neon Testing edition, built from the Git branches which get used to make releases from. You can download the ISO and try it on spare hardware or on a virtual machine to test them out.
But maybe you don’t want the faff of installing a distro. Containers give an easier way to test thanks to Distrobox.
Install Distrobox on your normal computer. Make sure Docker or podman are working.
Download the container with
distrobox create -i invent-registry.kde.org/neon/docker-images/plasma:testing-all
Then start it with
distrobox enter all-testing
And voila it will mount the necessary bits to get Wayland connections working and keep your home directory available and you can run say
kontact
and test the beta for the mail app.
Metadrop: Local tasks hierarchy on Drupal 10
Recently, in one of our projects with Drupal 10, we faced an interesting challenge: implementing two-level "local tasks" for a specific functionality of our module. Despite the number of documentation related to local tasks in Drupal, setting up two levels of these tasks proved challenging, as we couldn't get them to display in the way we needed. However, after exhaustive research, we found an example in an existing module that helped us solve the problem.
Exploring the ProblemThe need was to add a main "local task" and three associated subtasks that would show up when viewing or editing a node. Initially, the main obstacle was finding the right way to implement two levels of local tasks.
The Solution: Inspiration from Contributed ModulesDuring our search among existing contributed modules, we found…
1xINTERNET blog: Reunited in Berlin - DrupalCamp Berlin 2024
10 years after DrupalCity Berlin 2014 the community kicked-off another DrupalCamp in the heart of Europe uniting the global Drupal community. Learn what's behind this triumphant return.
Real Python: The Real Python Podcast – Episode #228: Maintaining the Foundations of Python & Cautionary Tales
How do you build a sustainable open-source project and community? What lessons can be learned from Python's history and the current mess that the WordPress community is going through? This week on the show, we speak with Paul Everitt from JetBrains about navigating open-source funding and the start of the Python Software Foundation.
[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short & sweet Python Trick delivered to your inbox every couple of days. >> Click here to learn more and see examples ]
Droptica: How to Integrate Drupal with LDAP? A Comprehensive Step-by-Step Guide
In this article, I’ll demonstrate how to integrate Drupal with a Lightweight Directory Access Protocol (LDAP) server, using JumpCloud as an example. With this guide, you’ll be able to quickly and securely manage users on your website. I encourage you to read the blog post or watch the video in the “Nowoczesny Drupal” series.
Golems GABB: Drupal Automatic Updates
This article is about the Automatic Updates module in 2024. Golems web experts will discuss its importance, core functions, recent improvements, and how it benefits the Drupal community. Whether you are experienced in Drupal or just starting to use it as your website's platform, knowing what this module can do is useful for keeping your Drupal site working well and safe in today's digital world.
Talk Python to Me: #485: Secure coding for Python with SheHacksPurple
Drupal Starshot blog: Looking at what's next for Drupal CMS
With the current Drupal CMS work tracks well on the way to delivering for v1, we're planning ahead to define what's next on the roadmap. We also have a few tracks that were already in progress for v1, but never formally announced.
As we move beyond the basics of a CMS, things get complicated quickly! So several of these tracks are somewhat open-ended, and likely require multiple approaches or solutions.
Tracks already in progress Project BrowserProject Browser is an ongoing initiative, to make it easy for site builders to find modules from within their Drupal sites, led by Leslie Glynn and Chris Wells Redfin. After several years of foundational work, the functionality is now working with a live API endpoint from drupal.org providing the module information.
Since Project Browser is a critical part of the builder experience for Drupal CMS, we're formally adding it as a work track to recognize that and ensure it is aligned with the product strategy and other work tracks. If you're looking for a way to contribute to Drupal CMS, join the #project-browser channel on Slack for the latest.
Workspaces as content moderationDrupal core has long provided tools for configurable content workflows, via the Workflows and Content moderation modules. In the meantime, the Workspaces module has become stable, and provides a more scalable method for staging content changes. Experience Builder will require workspaces to provide true content staging, because within XB a user can make changes to a number of different components at once, and content moderation does not allow for this. But right now, the complexity of workspaces makes it challenging for the most basic content moderation use cases.
The team from Tag1 already had a plan to completely replace content moderation with workspaces, and have now committed to delivering this functionality for inclusion in Drupal CMS. The goal of this track is to provide an experience similar to content moderation, where you can edit a single entity and create a draft, using workspaces but without exposing this to the user. So under the hood, workspaces is providing the draft/forward revision, but the user has no direct interaction with the workspace.
TelemetryTelemetry is a crucial part of modern software development to provide information about how real-world users interact with a software application. Drupal has not integrated a formal telemetry system in the past, but Drupal CMS is a great opportunity both to try a telemetry system, and to take advantage of the insight it provides to rapidly improve the product.
We formed a working group to look into options for telemetry for Drupal CMS and have an early proposal for this now. Ideally, we will include some basic capability in the initial release, but would like to recruit a track lead to oversee this work ongoing, after the initial release.
If you are interested in taking the lead on this track, please apply here.
New tracks we're recruiting for Content import / migrationEnabling users of other platforms to easily migrate their sites to Drupal is critical to delivering on the Starshot strategy. Drupal's migration tools provide a robust foundation, but this is a huge task to undertake, and may require more than one approach.
So this track may split off into several different efforts. For example, there may be a simple import solution for basic sites that have a structured data source. Another might offer a migration via site scraping. And another might provide a jumping off point for more complex migrations. Rather than prescribing the approach, we are open to all proposals.
If you are interested in proposing a solution for this, please apply here.
ToursDrupal has long had the capability to add tours, which are guided overviews of the site interface, via the Tour module. These guided tours are practically universal in our competitor products, and will be key to onboarding new Drupal users.
Several Drupal CMS recipes have provided or plan to provide a tour of the functionality they provide. In order to ensure that the tours provided by Drupal CMS are consistently applied and executed, we are seeking a lead to oversee this aspect of the product. This role is non-technical in nature, and requires skills in user experience, training, content writing and product design. The aim with tours will be to use them only where necessary, and not as a workaround for other fundamental UX improvements.
If you are interested in taking the lead on this track, please apply here.
Identity management / SSOIn user interviews with a number of people in our target person, they highlighted identity management and single-sign as a pain point with other platforms. Given Drupal's robust integration options, we feel this is an area where we can differentiate from our competitors, whose offerings may be more limited. But with flexibility comes complexity, and anyone who has tried to set up SSO in Drupal probably knows that it's not usually plug-and-play.
Part of the complexity is the wide range of providers, each with potentially different requirements. The Drupal CMS leadership team is currently undertaking an analysis of key integrations of all kinds, with a focus on user management, to formulate an approach to this that likely will open up one or more work tracks to build or refine the necessary functionality.
If you are interested in proposing a solution for this, please apply here.
Content translation toolsDrupal’s multilingual capabilities are robust, but there is an opportunity to make these tools even more accessible and efficient for content creators managing global audiences. This track focuses on enhancing Drupal’s translation and localization features to streamline content creation and support internationalization needs.
To achieve this, we could explore areas such as UX improvements to simplify translation workflows, AI-driven translation suggestions, integration with translation memories, notifications when content changes require re-translation, and more. Additionally, we can explore refining approval workflows and optimize the interface for managing multilingual content, making Drupal a more powerful, user-friendly platform for international sites.
If you are interested in proposing a solution for this, please apply here.
Front end design systemWe are seeking strategic partners interested in designing and implementing a comprehensive design system to integrate with Experience Builder for Drupal CMS. The goal for this initiative is to create a modern and versatile design system that provides designers and front-end developers tools to accelerate their adoption of Drupal as their digital platform, by enabling them to easily adapt it to their own brand. This design system will enable content marketers to efficiently build landing pages and campaigns, allowing them to execute cohesive marketing strategies while maintaining the brand integrity.
More information on this track, including timelines and how to apply, is available in the full brief.
ConclusionEach of these work tracks is aligned with the goals of the Starshot strategy, which aims to make Drupal CMS the go-to platform for marketers and content creators.
The tracks we are recruiting for are not expected to be included in the initial 1.0 release of Drupal CMS. That said, development on these tracks could start soon, with target completion in the first half of 2025.
For those looking to apply or contribute, join us on Slack to connect with existing track leads or reach out to the Drupal CMS leadership team with questions. You can also follow developments in the Drupal.org issue queue.
mark.ie: My LocalGov Drupal contributions for week-ending November 15th, 2024
LocalGov Drupal week + code contributions + getting elected on to the board of Open Digital Cooperative. It's been a busy week.
Matt Layman: Heroku To DigitalOcean - Building SaaS #206
Conclusion of KDE and Google Summer of Code 2024
All of KDE's Google Summer of Code (GSoC) projects are complete.
GSoC is a program where students or people who are new to Free and Open Source software make programming contributions to an open source project.
This post summarizes the outcomes of KDE project participating in GSoC 2024.
Projects AriannaAjay Chauhan worked on porting Arianna from epub.js to use Foliate-js. The work will hopefully be merged soon.
A screenshot of Arianna using Foliate-js to render a table of contents(Courtesy of Ajay Chauhan, CC BY-NC-SA 4.0) Frameworks
Python bindings for KDE Frameworks:
Manuel Alcaraz Zambrano, implemented Python bindings for KWidgetAddons, KUnitConversion, KCoreAddons, KGuiAddons, KI18n, KNotifications, and KXmlGUI. This was done using Shiboken. In addition, Manuel wrote a tutorial on how to generate Python bindings using Shiboken. The complicated set of merge requests are still being reviewed, and Manuel continues to interact with the KDE community.
Unit conversion example created using Python and KUnitConversion(Courtesy of Manuel Alcaraz Zambrano, CC BY-NC-SA 4.0) KDE Connect
Update SSHD library in KDE Connect Android app
The main aim of ShellWen Chen's project was to update Apache Mina SSHD from 0.14.0 to 2.12.1. The older version has a few listed vulnerabilities. The newer library required additional code to enable it to work on older Android phones, up to Android API 21.
KDE GamesImplementing a computerized opponent for the Mancala variant Bohnenspiel:
João Gouveia created Mankala engine, a library to enable easy creation of Mancala games. The engine contains implementations for two Mancala games, Bohnenspiel and Oware. Both games contain computerized opponents, João also started on a QtQuick graphical user interface. The games are functional, but additional investigation on computerized opponents may help improve their effectiveness.
Image of text user interface for Bohnenspiel(Courtesy of João Gouveia, CC BY-SA 4.0) Kdenlive
Improved subtitling support for Kdenlive:
Subtitling support has been improved for Kdenlive. Chengkun Chen added support for using the Advanced SubStation (ASS) file format and for converting SubRip files to ASS files. To support this format, Chengkun Chen also made subtitling editor improvements. The work has been merged in the main repository. Documentation has been written, and will hopefully be merged soon.
The new Style Editor Widget(Courtesy of Chengkun Chen, CC BY-SA 4.0) Krita
Creating Pixel Perfect Tool for Krita:
Ken Lo worked on implementing Pixel Perfect lines in Krita. As explained by Ricky Han, such algorithms remove corner pixels from L shaped blocks and ensure the thinnest possible line is 1 pixel wide. Implementing such algorithms well is of use not only in Krita, but also in rendering web graphics where user screen resolutions can vary significantly. The algorithm was implemented to work in close to real time while lines are drawn, rather than as a post processing step. Ken Lo's work has been merged into Krita.
An image showing that pixel perfect lines are obtained most of the time(Courtesy of Ken Lo, CC BY 4.0) Labplot
Improve Python Interoperability with LabPlot
Israel Galadima worked on improving Python support in LabPlot. Shiboken was used for this and it is now possible to call some of LabPlot functions from Python and integrate these into other applications.
An image of a plot produced using Python bindings to Labplot(Courtesy of Israel Galadima, CC BY-SA 4.0)
Kuntal Bar added 3D graphing capabilities to LabPlot. This was done using QtGraphs. The work has yet to be merged, but there are many nice examples of 3D plots for bar charts, scatter and surface plots.
A 3D bar chart(Courtesy of Kuntal Bar, MIT license) Okular
Forms/Javascript support improvement for Okular:
Pratham Gandhi worked on improving the forms/Javascript support in Okular. Around 25 requests have been merged to improve various features, some in the backend and some directly visible, such as fixing the size of the radio buttons or check boxes, or the one pictured below to improve the handling of floating numbers in different locales.
An image of showing an incorrect total sum calculation fixed during GSoC(Courtesy of Pratham Gandhi, CC BY-SA 4.0) Snaps
Improving Snap Ecosystem in KDE:
Snaps are self contained linux application packging formats. Soumyadeep Ghosh worked on improving the tooling necessary to make KDE applications easily available in the Snap Store. In addition, Soumyadeep improved packaging of a number of KDE Snap packages, and packaged MarkNote. Finally, Soumyadeep created Snap KCM, a graphical user interface to manage permissions that Snaps have when running.
Snap KCM(Courtesy of Soumyadeep Ghosh, CC BY-NC-SA 4.0) Next Steps
The 2024 GSoC period is finally over for KDE. A big thank you to all the mentors and contributors who have participated in GSoC! We look forward to your continuing participation in free and open source software communities and in contributing to KDE.
Python Morsels: Inspecting objects in Python
I rely on 4 functions for inspecting Python objects: type, help, dir, and vars.
Table of contents
- Inspecting an object's structure and data
- How to see an object's class
- Looking up documentation with help
- Getting the methods and attributes for an object
- Inspecting direct attributes of an object
- Base classes, module paths, and more
- Inspect Python objects with type, help, dir, and vars
The scenario is, we're either in the Python REPL or we've used the built-in breakpoint function to drop into the Python debugger within our code. So we're within some sort of interactive Python environment.
For example, we might be running this file, which we've put a breakpoint call in to drop into a Python debugger:
from argparse import ArgumentParser from collections import Counter from pathlib import Path import re def count_letters(text): return Counter( char for char in text.casefold() if char.isalpha() ) def main(): parser = ArgumentParser() parser.add_argument("file", type=Path) args = parser.parse_args() letter_counts = count_letters(args.file.read_text()) breakpoint() for letter, count in letter_counts.most_common(): print(count, letter.upper()) if __name__ == "__main__": main()And we've used the PDB interact command to start a Python REPL:
~ $ python3 letter_counter.py frankenstein.txt > /home/trey/letter_counter.py(18)main() -> breakpoint() (Pdb) interact *pdb interact start* >>>We have a letter_counts variable that refers to some sort of object. We want to know what this object is all about.
What questions could we ask of this object?
Well, to start with, we could simply refer to the object, and then hit Enter:
>>> letter_counts Counter({'e': 46043, 't': 30365, 'a': 26743, 'o': 25225, 'i': 24613, 'n': 24367, 's': 21155, 'r': 20818, 'h': 19725, 'd': 16863, 'l': 12739, 'm': 10604, 'u': 10407, 'c': 9243, 'f': 8731, 'y': 7914, 'w': 7638, 'p': 6121, 'g': 5974, 'b': 5026, 'v': 3833, 'k': 1755, 'x': 677, 'j': 504, 'q': 324, 'z': 243})We've typed the name of a variable that points to an object, and now we see the programmer-readable representation for that object.
How to see an object's classOften, the string representation tells …
Read the full article: https://www.pythonmorsels.com/inspecting-python-objects/Five Jars: Enhancing Code Reliability with Effective Vue.js Testing
Django Weblog: Django’s technical governance challenges, and opportunities
As of October 29th, two of four members of the Django Software Foundation Steering Council have resigned from their role, with their intentions being to trigger an election of the Steering Council earlier than otherwise scheduled, per our established governance processes.
To our departing members, Simon and Adam, thank you for your contributions to Django and its governance ❤️. The framework and our community owes a lot to your dedication, and we’re confident our community will join us in celebrating your past contributions – and look forward to learning about your future endeavors in the Django ecosystem. And thanks to the remaining members, James and Andrew, for their service over the years.
Our governance challengesGovernance in open source is hard, and community-driven open source even more so. We’re proud that Django’s original two Benevolent Dictators For Life (BDFLs) both retired from the role and turned things over to community governance ten years ago now. The BDFL model can provide excellent technical governance, but also has its flaws. So the mantle of technical governance then went on to the Core Developers and the Technical Board (renamed to Steering Council) was introduced.
However, time has revealed flaws in the Steering Council’s governance model and operations. The Steering Council was able to provide decision-making – tiebreaking when the developer community couldn’t lead to consensus – but didn’t provide more forward-looking leadership or vision. Disagreements over how – or if – the Steering Council should approach this part of leadership led us to the current situation, with no functioning technical governance as of a few weeks ago. Even before those recent events, those flaws were also a common source of frustration for our contributors, and a source of concern for Django users who (rightly or not) might have expectations of Django’s direction – such as the publication of a “roadmap” for Django development.
The Django Software Foundation Board of Directors is and was aware of those issues, and recently made attempts to have the Steering Council rectify them, in coordination with other established community members. The DSF Board has tried to be hands-off when it comes to technical leadership, but in retrospect we should have been getting involved sooner, or more decisively. The lack of technical leadership is an existential threat to Django – a slow moving one, but a threat nonetheless. It’s our responsibility to address this threat.
Where we’re headingWe now need new Steering Council members. But we also need governance reform. There’s a lot about the Steering Council that is good and might only need minimal changes. However, the overall question of the Steering Council’s remit, and how it approaches technical leadership for the Django community, needs to be resolved.
We’re going to hold early elections of the Steering Council, as soon as we’ve completed the ongoing 2025 DSF Board elections. Those elections will follow existing processes, and we will want a Steering Council who strives to meet the group’s intended goals:
- To safeguard big decisions that affect Django projects at a fundamental level.
- To help shepherd the project’s future direction.
We expect the new Steering Council will take on those known challenges, resolve those questions of technical leadership, and update Django’s technical governance. They will have the full support of the Board of Directors to address this threat to Django’s future. And the Board will also be more decisive in intervening, should similar issues keep arising.
How you can helpWe need contributors willing to take on those challenges and help our community come out ahead. It’s a big role, impactful but demanding. And there are strict, often annoying eligibility rules for the Steering Council.
To help you help us, we’ve set up a form: Django 6.x Steering Council elections - Expression of interest.
If you’re interested in stepping up to shepherd Django’s technical direction, fill in our expression of interest form. We’ll let you know whether or not you meet those eligibility rules, take the guesswork out of the way. You get to focus on your motivation for taking on this kind of high-purpose, high-reward governance role.
Django 6.x Steering Council elections - Expression of interest
How everyone can helpThose elections will be crucial for the future of Django, and will be decided thanks to the vote of our Django Software Foundation Individual Members. If you know people who contribute to the DSF’s mission but aren’t Individual Members already -- use our form to nominate them as Individual Members, so they’re eligible to vote. If you’re that person, do nominate yourself. We consider all contributions towards our mission: advancing and promoting Django, protecting the framework’s long-term viability, and advancing the state of the art in web development.
Any questions? Reach out via email to foundation@djangoproject.com.
ImageX: Boost Your Drupal Site with Flavorful Modules Named After Food
Authored by Nadiia Nykolaichuk.
Drupal modules often come with creative, inspiring names, and some even sound downright delicious. Join us on a culinary adventure through modules inspired by foods, and discover the rich features they can bring to your site! Each tool in this collection is powerful enough to supercharge your website’s capabilities, adding its own unique blend of flavors, nutrients, and zest.
MinGW and Side-by-Side Manifests
Qt Creator 14 has removed support for its Python 2 pretty printers.
Presenting privact at KDE Akademy
Earlier this year I had the pleasure of visiting the KDE Akademy 2024 in Würzburg. It had been a few years since my last visit to Akademy and it was great to see old friends and meet new ones. Besides socializing, my main task was to talk to as many KDE people as possible about the privact project and its integration into KDE. Knowing the KDE community, not surprisingly this resulted in lots of interesting discussions.
Most importantly, I gave a talk about the current state of privact’s integration with KUserFeedback. If you missed it, here is the recording:
As a follow-up, we had 2 BoFs on Monday to discuss the next steps. Felix was kind enough to join me to provide more technical developer insights than I can give.
As a first teaser for you: In the short term, the private approach will allow KDE to do proper user research, thereby enabling us to do data-driven UX without compromising user privacy. In the longer term, privact aims to restore digital privacy for everyone, even outside of KDE, even outside of FLOSS. You can learn more in upcoming posts or on the privact homepage.
The individual feedback on the privact approach during Akademy was very good, which is why we now want to start communicating with the larger KDE community. So this post is not only to report about my attendance at the Akademy, but also to start blogging again on Planet KDE and to check if the aggregation works.
Hello World Planet!
Reproducible Builds: Reproducible Builds mourns the passing of Lunar
The Reproducible Builds community sadly announces it has lost its founding member.
Jérémy Bobbio aka ‘Lunar’ passed away on Friday November 8th in palliative care in Rennes, France.
Lunar was instrumental in starting the Reproducible Builds project in 2013 as a loose initiative within the Debian project. Many of our earliest status reports were written by him and many of our key tools in use today are based on his design.
Lunar was a resolute opponent of surveillance and censorship, and he possessed an unwavering energy that fueled his work on Reproducible Builds and Tor. Without Lunar’s far-sightedness, drive and commitment to enabling teams around him, Reproducible Builds and free software security would not be in the position it is in today. His contributions will not be forgotten, and his high standards and drive will continue to serve as an inspiration to us as well as for the other high-impact projects he was involved in.
Lunar’s creativity, insight and kindness were often noted. He will be greatly missed.
More information and tributes to Lunar are available [FR], as is a broader history of the Reproducible Builds project.