HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
lone-lang
lone
C2023–2026
lone-lang / lone

lone

The standalone Linux Lisp

2Distinct people
20Mentions
1Explicit recommenders
436GitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

The standalone Linux Lisp

GitHub

Where it is used

No documented product use has been verified yet.

What people are saying

It's turned into one of my favorite topics too. It's weird how all the tools out there are all about the ELF sections. Apparently the sections are where all the fun stuff gets…

matheusmoreira used a recommendation phrase. One indexed comment matches. This is a phrase match, not a verdict.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 3:56:07 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year20 dated mentions

Observed mentions: 2023-04-23 18:21:17 UTC to 2026-08-19 13:28:30 UTC.

024682023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 8 mentions; 2 submissions, 6 comments20232024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 5 mentions; 0 submissions, 5 comments20242025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2026-01-01 00:00:00 UTC to 2027-01-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments. Incomplete calendar period.2026*

* An incomplete calendar period is marked with an outlined bar. Its count is not directly comparable with a full period.

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC826
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC505
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC303
2026 (partial)2026-01-01 00:00:00 UTC2027-01-01 00:00:00 UTC404

What Hacker News says

20 sources
> Hardly anything is written against the kernel ABI except glibc itself. I'm working hard to change that. Here's an entire lisp interpreter written in freestanding C using nothing but Linux system calls: https://github.com/lone-lang/lone It has a system-call primitive too, which means it can do anything. Here's a TCP echo server written in lone lisp: https://github.com/lone-lang/lone/blob/master/examples/tcp-e... It works, and you don't need libc. > Like it or not, glibc is the singular entry point for desktop Linux Well I don't like it, and I've made it my mission to fix it. Maybe lisp isn't the answer, Rust is. I've revived my liblinux crate too. https://github.com/matheusmoreira/liblinux I'm going to add system calls to this thing every day until I have every single one. Then I'll use them to make all of my applications. Already have m
Read the rest
y first project planned: a custom Rust network stack for my QEMU virtual machines so I can firewall them off in userspace without root access. > the Linux platform The linux platform is these system calls. Everything else is userspace. This is exactly what makes it special. https://www.matheusmoreira.com/articles/linux-system-calls
In Solo – a .so loader for static Linux binaries
Thanks for reading and for your interest in lone! > I also love the APE setup Yeah, jart's cosmopolitan is awesome. I've even sent some floating point code her way! I have my own take on the "embed data into the executable" problem too. It's the one thing I've made that I think is truly novel. I developed a tool to copy the data into the ELF in such a way that Linux mmaps it in automatically. Lone can just reach it at runtime via the auxiliary vector. No need to read /proc/self/exe. You might enjoy this article: https://www.matheusmoreira.com/articles/self-contained-lone-... The ELF editor is written in C right now. I'm getting the language ready to host it as a lone application. That'll make it easy to redesign this feature and develop even more high level features on top of the code loading. https://github.com/lone-lang/lone/issues/8
In Interview with Matheus Moreira about Lone Lisp and Linux Kernel
I call it the lone programming language. https://github.com/lone-lang/lone/ It's a lisp interpreter with zero dependencies targeting Linux exclusively. I've written about a few of its development milestones: https://www.matheusmoreira.com/articles/self-contained-lone-... https://www.matheusmoreira.com/articles/delimited-continuati... I'm particularly proud of my ELF hack to allow the interpreter to introspect into a lisp code section at runtime without any /proc/self/exe shenanigans. Wish other languages would adopt it. Top comment and its replies talk about linking the lisp code into a self-contained, easily distributable application: https://news.ycombinator.com/item?id=45989721 I think I addressed that problem adequately. I can create applications by copying the interpreter and patching in some special ELF segments containing lisp modu
Read the rest
les. The mold linker even added features to make it easy and optimal. Since there is no libc nonsense, Linux compatibility depends only on the system calls used. Theoretically, applications could target kernels from the 90s. My Linux system call philosophy: https://www.matheusmoreira.com/articles/linux-system-calls At some point I even tried adding a linux_system_call builtin to GCC itself but unfortunately that effort didn't pan out.
In The lost cause of the Lisp machines
> Has anyone else built something similar? I made my own lisp. It used to have a recursive interpreter but I recently finished converting it into a register/stack machine that's essentially a modified version of the Explicit Control Evaluator from Structure and Interpretation of Computer Programs. https://github.com/lone-lang/lone/blob/master/source/lone/li... Now I'm thinking about converting it into a CESK machine which I believe is a proper stack machine. Modifying the SICP machine has proven difficult due to the loose stack discipline. I'm told register machines are faster but keeping track of all those ad hoc pushes and pops is turning into a nightmare. > What features would you add to make it more useful? The neat part about all these machines is how the stack itself turns into some sort of code. You push some state indicating what
Read the rest
you want the machine to do next. Then you set it up so that it evaluates a value. When it's done, that value just flows into whatever the next computation step is. Making a copy of the stack and wrapping it into a callable that just plugs that value in is how first class continuations are implemented.
In Show HN: I built a minimal Forth-like stack interpreter library in C
> Go binaries on Linux don't need libc (except for NSS, which is glibc-only idiocy). They don't need NSS either, they just chose to depend on it because getting rid of if was too painful. Everyone's addicted to glibc and nobody enjoys going through the withdrawal symptoms. > Running a static libc-less binary as init is fun and easy! It's incredibly fun. I wrote a freestanding Linux Lisp interpreter and my long term goal is to boot Linux into it and bring up the entire system from within the REPL. https://github.com/lone-lang/lone I haven't tested it but I bet Linux can already boot into it just fine. I still need to do more work to make it able to bring up the system though. I've implemented endianness independent memory access functions, now I need a binary structure encoder and decoder. That will enable programs to do kernel I/O properl
Read the rest
y. What's holding me back right now is continuations. Language still doesn't have flow control. I've been slowly converting my interpreter into an interruptible virtual machine with continuations that can integrate with primitives written in C. Debugging this stuff turned out to be a nightmare.
In Path Isn't Real on Linux
I've been working on that language for a while now! https://github.com/lone-lang/lone It's a lisp interpreter with a built in system-call primitive. The plan is to implement everything else from inside the language. Completely freestanding, no libc needed. In the future I expect to be able to boot Linux directly into this thing. Only major feature still needed for kernel support is a binary structure parser for the C structures. I already implemented and tested the primitives for it. I even added support for unaligned memory accesses. Iteration is the only major language feature that's still missing. I'm working on implementing continuations in the interpreter so that I can have elegant Ruby style iteration. This is taking longer than expected. This interpreter can make the Linux kernel load lisp modules before its code even runs. I inven
Read the rest
ted a self-contained ELF loading system that allows embedding arbitrary data into a loadable ELF segment that the kernel automatically maps into memory. Then it's just a matter of reaching it via the auxiliary vector, The interpreter uses this to automatically run code, allowing it to become a freestanding lisp executable. I wrote an article about how it works here: https://www.matheusmoreira.com/articles/self-contained-lone-...
In Linux Syscall Support
matheusmoreira·Jan 4, 2024Recommendation phrase
It's turned into one of my favorite topics too. It's weird how all the tools out there are all about the ELF sections. Apparently the sections are where all the fun stuff gets stored and the program headers are just some kernel wizardry nobody really cares about. The section/segment dichotomy exists so that kernels need not load needless stuff onto memory. In practice it means things like ELF symbol tables are not available for introspection by the program. If pointers to those symbols are required, the easiest way is to get the ELF interpreter to give them to the program. If it's a static executable then there's no interpreter and things get annoying fast. Most solutions I've seen involve reading the program's own executable into memory and parsing the ELF structures, essentially duplicating the work of the kernel's ELF loader. Alternati
Read the rest
vely, one may engage in this incredibly fun activity called linker scripting. I chose to hack together an ELF patching tool in order to get Linux to automatically load arbitrary ELF file segments onto memory. Along the way I requested some linker features and actually got them! https://github.com/lone-lang/lone/blob/master/source/tools/l... With these tools I made it possible for my language's interpreter to load programs embedded inside itself. https://www.matheusmoreira.com/articles/self-contained-lone-... I really want to see this feature get adopted by the mainstream languages. Apparently no one else ever thought of it.
In Dealing with Weird ELF Libraries
What's wrong with bash though? Targeting bash specifically has massively improved my productivity and decreased the incidence of easily avoidable mistakes. Portable POSIX shell scripting is hell on earth but bash scripting with shellcheck can be surprisingly pleasant. I had the same experience with portable makefiles and GNU Make. For example, I managed to create a surprisingly good test suite with bash and the rest of the GNU coreutils: https://github.com/lone-lang/lone/blob/master/scripts/test.b... It even runs in parallel. Submitted a patch to coreutils to implement the one thing it couldn't test, namely the argv[0] of programs. I should probably go check if they merged it...
In A peculiarity of the GNU Coreutils version of 'test' and '['

Show HN: Self-contained Linux apps in Lisp

Not too long ago, a project of mine was shared here on HN. https://news.ycombinator.com/item?id=38126052 In that thread I wrote: > I have this vision in my mind: embedding lone modules into sections of the lone ELF and shipping it out. Zero dependencies, self-contained. I've been working on that since that day. Proud to say I've gotten it to work and thought I'd make it the subject of my first Show HN. Some free software projects gained features along the way too. The link is to an article with a proper demonstration, technical details and what happened in the past few weeks. The complete repository itself can be found here: https://github.com/lone-lang/lone I've completely reorganized it since the last thread. Would be very happy if you guys tried it out.
6 points · Open discussion
Yeah, she actually got that feature standardized. Apparently it's a binary version of the feature used in those self-extracting installer .run scripts. I finished the embedded segment loading feature by the way. I'm writing that article as promised but if you'd like to check it out ahead of time: https://github.com/lone-lang/lone/blob/master/source/tools/l... https://github.com/lone-lang/lone/blob/master/source/lone/au... https://github.com/lone-lang/lone/blob/master/source/lone/se... https://github.com/lone-lang/lone/blob/master/source/lone/mo...
In Cosmopolitan v3.1

Showing the 15 most recent of 20 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.