O
Oils Blog
oils.pub · Company blog · on HN since 2025
The Oils blog follows development of the Oils shell project, including the OSH and YSH shell languages, by Andy Chu.
What HN saysHN commenters are hopeful about Oils as a future default shell, citing its backward compatibility with bash and a gradual path to a modern language.
18HN people shared it
11linked it in comments
11stories submitted
57story points
4 months agolast shared
2025people per year2026
Most-shared posts
- 1Homepage7 people · first shared 2025
- 2Comments on Shared Unix Hosting vs. the Cloud4 people · 36 points · first shared 2025 · 22 comments on HN
- 3Reasons to Use OSH3 people · 4 points · first shared 2025 · discussion on HN
- 4A Tour of YSH3 people · 1 points · first shared 2025 · discussion on HN
- 5Ysh3 people · first shared 2025
- 6Oils 0.37.0 – Alpine Linux, YSH, and mycpp2 people · 7 points · first shared 2025 · 1 comments on HN
- 7J8 Notation – Fixing the JSON-Unix Mismatch2 people · 3 points · first shared 2025 · discussion on HN
- 8Oils for Unix – A Pause in the Project1 people · 3 points · first shared 2026 · discussion on HN
- 9Oils – Reviewing Our NLnet Grants After 4 Years1 people · 2 points · first shared 2026 · discussion on HN
- 10Things to Do for the New Oils.pub Domain1 people · 1 points · first shared 2025 · discussion on HN
- 11Quality1 people · first shared 2026
- 12Hay1 people · first shared 2025
- 13Links1 people · first shared 2025
- 14Overview1 people · first shared 2025
- 15Match.re2c input.h1 people · first shared 2026
What HN people wrote when they linked it
chubot · 2025-04-07
??? This complaint seems more than 20 years too late
Arithmetic is built into POSIX shell, and it's universally implemented. The following works in basically every shell, and starts 0 new processes, not 2:
$ bash -c '[ $((1 + 1)) = 2 ]; echo $?' 0 $ zsh -c '[ $((1 + 1)) = 2 ]; echo $?' 0 $ busybox ash -c '[ $((1 + 1)) = 2 ]; echo $?' 0 YSH (part of https://oils.pub/ ) has a more familiar C- or JavaScript-like syntax:
$ ysh -c 'if (1 + 1 === 2) { echo hi }' hi It also has structured data types like Python or JS:
$ echo '{"foo": 42}' > test.json $ ysh ysh-0.28$ json read < test.json ysh-0.28$ echo "next = $[_reply.foo + 1]" next = 43 and floats, etc.
$ echo "q = $[_reply.foo / 5]" q = 8.4 https://oils.pub/release/latest/doc/ysh-tour.html (It's probably more useful for scripting now, but it's also an interactive shell)
3eb7988a1663 · 2026-05-23
I am deeply hopeful that Oil Shell (now just Oils) will get embraced by a big distro as the standard shell at some point. The lowest friction migration I see available while still offering a bunch of improvements.
https://oils.pub/
e12e · 2026-02-24
I think looking at some of the documentation for oils (née oil sh) and ysh - as well as [looking at using] these two projects [in place of bash] - is also a good idea today:
https://oils.pub/
tux1968 · 2025-08-25
I think https://oils.pub/ has a good shot at being the eventual replacement because it has a very strong transition story. Being backward compatible, while allowing you to progressively embrace a modern replacement, is pretty powerful.
hnlmorg · 2025-04-17
The most interesting ones I’ve come across are:
- Elvish https://elv.sh
- Murex https://murex.rocks
- Oil https://oils.pub
nulld3v · 2025-05-06
+1 on nushell, it is incredible. Having all data typed and structured is an insane superpower.
Common worries I hear from people that were non-issues in practice:
- Not POSIX compatible: Nushell doesn't aim to replace POSIX, there's no problem with dropping back to bash to execute some shell snippets
- You need to re-learn everything: I'm not a huge fan of how the commands are organized, but I still didn't find it that difficult. nushell's prompt/readline comes with an inline help menu with fuzzy search. Hit CTRL+O to edit a command/pipeline in your IDE/editor of choice with LSP backed intellisense, type-checking and in-editor command docs/help. The syntax is very simple and intuitive.
- Just use python: Sure, but python comes with a lot of disadvantages. It's slow and uses dynamic typing. Static typing in nushell catch typos in pipelines & scripts before they execute. It also makes in-shell and IDE LSP tab-completions very accurate. Large files process quickly though it will still consume more memory if you aren't able to process all the data in a streaming fasion. It's like having jq but with autocomplete and it works on all command output & shell variables. Though if you really like python, check out Oil/OSH/YSH: https://oils.pub/
- All Unix commands output text, structured data is useless in a shell: `detect columns` (https://www.nushell.sh/commands/docs/detect_columns.html) - now it's structured. Or use `from <format>` if the command outputs CSV, JSON, INI, YAML,…
Taikonerd · 2025-12-12
If you're seeing this project for the first time, this link may help:
"Links to Explain Oils in 2025": https://oils.pub/blog/2025/12/links.html
nextaccountic · 2025-11-18
I think that osh is valuable precisely because of that, since it's bash compatible. The project also has ysh which is not bash compatible, but fixes a lot of shell brokeness, including the #1 source of shell bugs, the need to quote almost 99% of variables and subshell invocations (and not quote them in the rare case you actually want splatting)
https://oils.pub/osh.html
https://oils.pub/ysh.html
aidenn0 · 2025-07-31
That's good to know; ysh[1] will treat pipelines with a SIGPIPE indicative exit code as successful to allow e.g.
foo |head -n2 to be treated as successful. I haven't seen anyone complaining yet about rust programs breaking this idiom, but I'll keep an eye out for it.
1: https://oils.pub/release/latest/doc/ysh-tour.html
alganet · 2025-05-26
https://github.com/shellfire-dev
https://github.com/shellspec
https://oils.pub/
There's probably more.
The shell has a ____wide____ userbase with many kinds of users. Depending on your goal, the rabbit hole can go very deep (how portable across interpreters, how dependant on other binaries, how early can it work in a bootstrap scenario, etc).
These are mine:
https://github.com/alganet/coral
https://github.com/alganet/shell-versions
https://github.com/Mosai/workshop
jodrellblank · 2025-10-03
The context of the blog post is that "warts" are the way something was originally designed or built, which is now outdated and you would change it if you could, but you don't want to break backwards compatibility so you don't.
> "For example, some GNU programs like `grep` and `find` support a `POSIXLY_CORRECT` env var, which changes their interface and behavior."
By your own logic that's not a wart, that's the way the programs work and they are documented to work like that. Twisting yourself into knots to pretend Linux/Unix utilities are perfectly designed isn't good logic. There's no excuse "it was designed that way" or "it's documented to work like this" which makes something not warty. Something might have been a good design originally and become a bad design as the world changed around it.
For example unserialised byte streams where you have to fight whether \n or 0 (null byte) are data or record separators, is a wart. How do we know? Because when people design newer tools they don't keep that, they design it away. Serialised JSON and jq, .NET objects in PowerShell, structured data in nushell[1] and oilshell YSH[2].
[1] https://www.nushell.sh/
[2] https://oils.pub/ysh.html