Oils - Reviewing Our NLnet Grants After 4 Years

Lobsters Hottest News

Summary

The Oils project reviews its four years of NLnet-funded development, presenting plots showing progress on OSH and YSH shells, including completion of Python-to-C++ translation and memory-safe garbage collection.

<p><a href="https://lobste.rs/s/rlt5x6/oils_reviewing_our_nlnet_grants_after_4">Comments</a></p>
Original Article
View Cached Full Text

Cached at: 06/02/26, 11:38 PM

# Reviewing Our NLnet Grants After 4 Years Source: [https://oils.pub/blog/2026/06/grants.html](https://oils.pub/blog/2026/06/grants.html) \|[blog](https://oils.pub/blog/)\|[oils\.pub](https://oils.pub/) 2026\-06\-01 We received our first[NLnet](https://nlnet.nl/)grant in June**2022**, and we've been awarded three more grants since then\. Four years and four grants later, it's worth looking back to see what we did\. So I made some**plots**for this post\! Unfortunately, we won't finish the fourth grant\. I wrapped it up early because of the family issues mentioned in March:[A Pause in the Project](https://oils.pub/blog/2026/03/status-update.html)\. What happened is that more contributions led to a**backlog**of pull requests, I haven't been able to review them all\. I also share some high\-level thoughts and feelings on the state of the project\. ## New Plots In March 2022, just before we received the first grant, I published[Oil Is Being Implemented "Middle Out"](https://www.oilshell.org/blog/2022/03/middle-out.html)\. It has[a plot](https://www.oilshell.org/blog/2022/03/middle-out.html#plot-progress-in-two-directions)of our[spec test](https://oils.pub/cross-ref.html?tag=spec-test#spec-test)metrics\. I wrote that the gray rectangle showed a**"fallow period"**in the development of[OSH](https://oils.pub/cross-ref.html?tag=OSH#OSH)\.[OSH](https://oils.pub/cross-ref.html?tag=OSH#OSH)wasn't making progress as fast as it had, because I started working on[YSH](https://oils.pub/cross-ref.html?tag=YSH#YSH)\(then called the Oil language\)\. In other words, it was clear the project got too**big**, and I needed help\! So what happened after we were funded, and more people helped? ### OSH \- Speed and Compatibility I revived the code to generate that 2022 plot \(shell, Python, and R scripts\!\)\. Here's the update: ![Progress on OSH](https://oils.pub/blog/2026/06/osh-progress.png) OK cool, I wasn't expecting the story to look this**clean**\! - The blue line and red line**converged in early 2023**, which means that the Python implementation and C\+\+ implementation pass all the**same tests**\. In other words, we finished the Python\-to\-C\+\+ translation\. - That means we can "just write Python", and we get a shell in fast, native code, with no dependencies\. This is just like shells written in C\. - We also finished the garbage collector in January 2023:[Pictures of a Working Garbage Collector](https://www.oilshell.org/blog/2023/01/garbage-collector.html)\. This was a big achievement that doesn't appear on the plot\. We now have something**better**than shells written in C: garbage collection means that our code is memory safe\! - The**slope**of the converged lines increased\. That means that we made faster progress on[OSH](https://oils.pub/cross-ref.html?tag=OSH#OSH)once the translation was done\. - The fallow period I mentioned is the part where the blue line was**flatter**— from mid\-2020 to 2023\. So the funding from[NLnet](https://nlnet.nl/)really helped[OSH](https://oils.pub/cross-ref.html?tag=OSH#OSH)\. ### YSH \- A Graceful Upgrade, and a New Language But that's not all\! After the first grant, contributors were excited about[YSH](https://oils.pub/cross-ref.html?tag=YSH#YSH), and I applied for another grant\. \(I also[renamed the project](https://www.oilshell.org/blog/2023/03/rename.html)in early 2023\.\) Here's a similar plot of YSH progress: ![Progress on YSH](https://oils.pub/blog/2026/06/ysh-progress.png) Notice a few things: - [YSH](https://oils.pub/cross-ref.html?tag=YSH#YSH)didn't really exist until**after**the NLnet funding\. There was no red line at all, and I did not recommend using the pure Python version\. - [YSH](https://oils.pub/cross-ref.html?tag=YSH#YSH)was fully translated to native code in early 2024 — i\.e\. the red and blue line converged then, about a year after they converged for[OSH](https://oils.pub/cross-ref.html?tag=OSH#OSH)\. - The increased**slope**of the converged line shows that we made a lot of progress on[YSH](https://oils.pub/cross-ref.html?tag=YSH#YSH)from mid\-2023 to 2025\. That's when most of the language was developed\. So these plots paint a clear and positive picture\. The funding helped\! Before making the plots, I wasn't sure how they would look\. ### Alpine Package Disagreements \- 139 to 11 OK now let's look at what happened in the last year or so\. The goal of the fourth grant was to stress test[OSH](https://oils.pub/cross-ref.html?tag=OSH#OSH), by running it as the**only**shell on a complete Linux system \(Alpine Linux\)\. I described that work in December: - [Oils 0\.37\.0 \- Alpine Linux, YSH, and mycpp](https://oils.pub/blog/2025/12/release-0.37.0.html) Contributors wrote blog posts about some of the fixes, which I linked to in March: - [Eight Blog Posts by Contributors](https://oils.pub/blog/2026/03/writing.html) - [Four More Blog Posts from Contributors](https://oils.pub/blog/2026/03/writing2.html) We kept track of the work with this dashboard \(made with Markdown and shell scripts\): - [https://op\.oils\.pub/aports\-build/published\.html](https://op.oils.pub/aports-build/published.html)\- Results of`regtest/aports` Here's a visualization of that data \(limited to the Alpine`main`repo\): ![Progress on regtest/aports in 2025](https://oils.pub/blog/2026/06/aports-disagree.png) So we went from**139**disagreements building with[OSH](https://oils.pub/cross-ref.html?tag=OSH#OSH)in August, to**11**in early December\. \(There was at least 1 disagreement fixed after the last measurement of 12\.\) This was fantastic**momentum**, but there is a caveat\. I**merged**many pull requests, but the backlog of unreviewed pull requests also grew\. And, in the same month, most of my free time evaporated\. ## Evaluations Honestly, I was feeling a bit**down**about the project before writing this post\. I sent more than one e\-mail to[NLnet](https://nlnet.nl/)explaining the early end of the grant, which were perhaps overly pessimistic\. But now I feel pretty good about what we did\. The way I framed it is that we met our goals for the**grants**, but that doesn't necessarily mean the overall**project**has been a success\. So let's talk about the grants first, and then the project\. ### Did We Meet Our Goals for the Grants? Yes, the plots basically show that, but they don't tell the whole story\. I think the real story is that we did many**hard**things that could have failed, but ended up working\. - We could have failed to**speed up**the code 30x\-50x by translating typed Python to C\+\+\. But this did happen, in the first grant\. - We could have failed to write a garbage collector\. But we got it done, and it's been solid for a few years now\. - The**design**of[YSH](https://oils.pub/cross-ref.html?tag=YSH#YSH)could have failed, e\.g\. due to being constrained by compatibility\. But that didn't happen:- When I started the project, many people thought upgrading shell was impossible\! But now, multiple people written thousands of lines of[YSH](https://oils.pub/cross-ref.html?tag=YSH#YSH), including in professional contexts\! Thanks to Will Clardy and many others for their code and feedback\. - It could have been that nobody wanted to work on Oils for 50 euros an hour\. But in fact I got an overwhelming number of responses\. And the contributors we chose were very skilled — more skilled than me in significant respects\. So one reason I've been working on this project for**10 years**is that things keep working\. There have been several "wrong turns" and some backtracking, but we haven't gotten stuck on anything for long\. And I think there's basically**no risk**that we don't close the gap on the remaining 11 disagreements, as long as we have time to do it right\. ### Did the Project Meet Its Goals? But even though we met these smaller goals, I think it's time to re\-evaluate the**project**goals\. \(It's important to say that**my available time**colors this whole discussion\. I hope that situation will change, but it may not change soon\.\) So let's go back to the slogan: > Our upgrade path from bash to a better language and runtime We did in fact do what many people thought was impossible: implement a POSIX\- and[bash](https://oils.pub/cross-ref.html?tag=bash#bash)\-compatible shell in a principled way; and then upgrade that to a new language[YSH](https://oils.pub/cross-ref.html?tag=YSH#YSH)\(with some caveats\)\. But, I am not sure that this is actually an upgrade path in practice\. What I underestimated is that this strategy requires a lot of work for**distros**\. And the foundations of most distros don't change a lot, for obvious reasons\. Many foundational shell scripts are in maintenance mode, and the maintainers only understand parts of them\. On the other hand, I would say that e\.g\.[systemd](https://en.wikipedia.org/wiki/Systemd)is evidence that the foundations can be changed, in a pretty radical way\. And distros**pulled**systemd, apparently because it saved them a lot of work\. But I can see that, right now, there is not a killer reason for distros to pull Oils\. It's more like we would be**pushing**, and I think that's somewhat fundamental, without some big changes\. ### Even Bigger Goals So I may no longer believe in the "upgrade path from bash" framing\. Right now, it doesn't seem realistic\. But I still believe in the**even more ambitious**goals of the project: - "Compressing" many domain\-specific languages into a general purpose shell language:[Sketches of YSH Features](https://www.oilshell.org/blog/2023/06/ysh-sketches.html)\(June 2023\) - We made**some**progress on YSH as a host for DSLs, but not enough\. - Why is this still interesting? When writing code becomes cheap,**reading**code becomes more valuable\. And so far I haven't found anyone who likes to read a mish\-mash of shell, awk, make, CMake, YAML — that is,[Unix sludge and cloud sludge](https://oils.pub/ysh.html)\. - A distributed shell - We're running into this problem ourselves, e\.g\. with`regtest/aports`, our Soil CI, and making a release in the cloud\. See the TODO list below\. - The complement to a distributed shell is a distributed file system\. As with[J8 Notation](https://oils.pub/cross-ref.html?tag=j8-notation#j8-notation), it helps to rethink things from the perspective of**data**rather than computation\. - The[most popular post](https://www.oilshell.org/blog/2021/07/blog-backlog-2.html)on this blog was circulated as[Kubernetes Is Our Generation's Multics](https://news.ycombinator.com/item?id=27903720)\(5 years ago, and 5 years after the project started\!\) - Headless shell / GUIs interfaces \-[Screenshots](https://www.oilshell.org/blog/2023/12/screencasts.html#headless-protocol-oils-web_shell)and[Wiki](https://github.com/oils-for-unix/oils/wiki/Headless-Mode) - LLM web interfaces like Claude and Gemini look a lot like a shell to me\. This fact hasn't been lost on many people, e\.g\.[yosh](https://yoshell.ai/)by Filip Pizlo, and the Warp terminal\. LLMs are the biggest thing to hit programming in a decade, and they are intricately entangled with Unix shell\. But I simply don't know how to make progress on those goals, with the time I have, and the resources we have\. But I honestly have a lot of**fun**pursuing them\. ## Other Things I Wrote to NLnet I made most of the points in this post in my mails to NLnet\. Here are some other thoughts from those mails\. ### Project Management We didn't find enough people to work on[YSH](https://oils.pub/cross-ref.html?tag=YSH#YSH)itself\. Aidan implemented essential parts of[YSH](https://oils.pub/cross-ref.html?tag=YSH#YSH), and provided crucial design feedback on features like[closures](https://www.oilshell.org/blog/2025/01/release-0.24.0.html), but we could have used more help\. One way you can see this is that we never solved the problem of making progress on[OSH](https://oils.pub/cross-ref.html?tag=OSH#OSH)and[YSH](https://oils.pub/cross-ref.html?tag=YSH#YSH)in parallel\. For example, the fourth grant was all about[OSH](https://oils.pub/cross-ref.html?tag=OSH#OSH), and we didn't make much progress on[YSH](https://oils.pub/cross-ref.html?tag=YSH#YSH)during that time\. The plots**do**show increased progress, so the grants did help\. But I think the scope of the project was always too large\. ### Design Bottleneck / Decentralized FOSS Model I also think I was a bit naive about what you can do in the FOSS model\. I didn't pay enough attention to the project's organization\. Prior to NLnet funding, I worked on the project myself for six years\! There were other contributors, but nobody approaching full time\. Another way to say this is that, historically, I would be interested in working on something like Bell Labs Unix, more so than GNU/Linux\. I'm interested in new system**design**ideas, just as much as principled implementations of existing systems\. Here's a related comment: > I think Linux has an enormous design debt to Bell Labs \[2\] \.\.\. > I actually wonder if LLM\-generated code could be a sign of a breakdown\. i\.e\. we have this big mess of open source code, which in theory should be very valuable, but some large proportion of new programmers can only understand it by throwing LLMs at it \.\.\. In other words, I'd say that our collective software infrastructure was not in great shape, prior to the introduction of LLMs\. ## Conclusion Since we are ending the 4th grant early, I thought it would be appropriate to publish my thoughts\. We made a ton of progress over the last 4 years, but the project is "paused" for now\. There will still be updates and releases — see the TODO list below — but it will be slow and on\-demand\. That is, I hope people will show up on[Zulip](https://oils.pub/cross-ref.html?tag=zulip#zulip)to chat, but I won't "push" the project for quite awhile\. ### Thank You Thank you to everyone who contributed\! Not just people who worked under the grant, but everyone else as well\. - Jesse Hughes, Melvin Walls, CoffeeTableEspresso - Chris Watkins, Aidan Olsen, Samuel Hierholzer - Justin Pombrio, Koichi Murase - Andriy Sultanov, Bram Tertoolen, Gabriel Stang, Adejumo David Adewale And thank you to NLnet\! - Michiel Leenaars, Bob Goudriaan, Lwenn Bussière, Gerben, Layla Otter, and to everybody else who helped behind the scenes\. --- Please feel to ask questions or give feedback[in the comments on Zulip](https://oilshell.zulipchat.com/#narrow/channel/392989-blog-comments/topic/Reviewing.20Our.20NLnet.20Grants.20After.204.20Years/with/599284299)\! ## Appendices ### TODO List Here's what I'm thinking about right now\. - Address issues in the design of[YSH](https://oils.pub/cross-ref.html?tag=YSH#YSH)`try`, from Will Clardy and Samuel Hierholzer\. - I think we can make the Oils parser run under Python 3, for the[resholve](https://github.com/abathur/resholve)use case \(Travis Everett\)\. - I want to merge**some**of the pull requests, most of which are related to[OSH](https://oils.pub/cross-ref.html?tag=OSH#OSH)\. Changes with new tests should get priority\. - Make another release\.- This brings to mind[\#containers \> Make Release in the Cloud](https://oilshell.zulipchat.com/#narrow/channel/308821-containers/topic/Make.20Release.20in.20the.20Cloud/with/530390147), which is a[\#distributed\-shell](https://oilshell.zulipchat.com/#narrow/channel/348521-distributed-shell)use case - I want people other than me to be able to make releases\. - Respond to some Github issues- Sorry I don't like Github anymore:[\#oils\-discuss \> Threads about Codeberg/sourcehut](https://oilshell.zulipchat.com/#narrow/channel/121540-oils-discuss/topic/Threads.20about.20Codeberg.2Fsourcehut/with/564761044) ### Future Posts Here are some topics I cut out of this post\. #### LLMs helped me with crappy old languages: VimScript and raw SQL In early 2025, I wrote a YSH syntax definition in**VimScript**, which resulted in the doc[Three Algorithms for YSH Syntax Highlighting](https://github.com/oils-for-unix/oils.vim/blob/main/doc/algorithms.md)\. Based on my previous experience with VimScript around 2008 or so, I can say that this wouldn't have happened without dozens of queries to Claude\. \(But you can see from the doc that it's not vibe\-coded\. Instead, I learned the language by writing a program, with tests\.\) --- LLMs also helped me learn more**SQL**\. In the past, I've used the R language for table manipulation — for example, the plots above were generated with`ggplot2`\(the grammar of graphics\)\. But for the table manipulation in[regtest/aports](https://op.oils.pub/aports-build/published.html), I used`sqlite`\. I remember starting a similar project with raw SQL in 2014, and it was hard for me\. So again I used dozens of queries to Claude to learn SQL\. \(I like the analysis in[Against SQL](https://www.scattered-thoughts.net/writing/against-sql/)\.\) #### Stories About Personal Agency Here's another excerpt from my comment above: > Maybe future programmers will actually want some control back \- to build systems that are understandable, reliable and secure, use hardware in a reasonable way, etc\. So that comment is about personal**agency**, and that's basically what the Oils project is about: - I like the**shell interface**because I tell the computer what to do\! Not the other way around\. I don't get pop\-up notifications and dark patterns while using shell\. - I also like to have the**source code**of the software I run\. And turning source into machine code invariably evolves thousands of lines of shell scripts \(and related glue, aka*Unix sludge*\)\. So shell still very much aligns with my interests, and it aligns the future of computing\. I hope I'll again have time to work on these ideas — perhaps from a different angle, and putting to use some of the things I learned about both engineering and project management\.

Similar Articles

One year with Codeberg

Lobsters Hottest

GNU Guix reflects on one year since migrating to Codeberg for source code hosting and collaboration, discussing the decision process, challenges, and outcomes.