Top
Best
New

Posted by imtomt 8 hours ago

Show HN: Building a web server in assembly to give my life (a lack of) meaning(github.com)
This is ymawky, a static file web server for MacOS written entirely in ARM64 assembly. It supports GET, PUT, DELETE, HEAD, and OPTIONS requests, and supports Range: bytes=X-Y headers (which allows scrubbing for video streaming). It decodes percent-encoded URLs, strictly enforces docroot, serves custom error pages for any HTTP error response, supports directory listing, and has (some) mitigations against slowloris-like attacks.

I’ve also written a more detailed writeup here: https://imtomt.github.io/ymawky/

298 points | 139 comments
rdevilla 5 hours ago|
Ten years ago, I would have kowtowed to someone elite enough to build something like this.

Today, I just think, "how long would LLMs have taken to write this?"

I mourn the death of a human artform.

wewewedxfgdf 4 hours ago||
It's far more exciting than sad.

Got an idea that you'd need assembly language for - now you can do it instead of..... never doing it because it would have been impossible for you in any practical way.

Look to the positive instead of lamenting something that never would have happened.

It's unbelievably exciting that you can now program a computer virtually without the limitation of your ability to hand code it.

pocksuppet 44 minutes ago|||
If you've got an idea that you need assembly language for, you can use a compiler to create that assembly language. It'll probably do a better job than an LLM. Assembly projects are interesting because they're written in assembly, not because they contain assembly.
nzhsbdb 4 hours ago||||
The result is unimpressive either way -- it's the journey that is exciting for these kinds of projects
wewewedxfgdf 4 hours ago|||
I understand for some people its the display of human wizardy that matters.

For me it's about making the computer do awesome things - I do not care how I get there I just want it to do whatever I can conjure in my head.

Thanemate 3 hours ago|||
As much as I enjoy the novelty of asking anime pictures from chatGPT I do not, for a single moment, consider myself a doer of anime pictures.

And a fair aside, the result will be "good enough" approximation of what I conjured in my head, but never the thing itself. For me to do the exact thing I conjured in my head it will require to pick up the mouse and draw the rest of the owl. I don't know if that's more telling of my imagination being demanding or my standards.

vladms 2 hours ago|||
True if you use only chatGPT to do something and accept the generated stuff as the final output.

Probably not the case for anime pictures, but in other domains, you can use chatGPT as a first level and then go on the improve it from there. To make a parallel: if you draw with a pencil on a piece of paper, you would still think of yourself a doer even if you did not manufacture your pencil or paper.

Thanemate 1 hour ago||
There's still personal skill expression in driving cars and using a pencil for drawing, that makes the difference between drivers and artists visible enough to justify hiring one over another.

So far I can't say the same for leveraging LLM's and, in the off-chance that there is, we have an entire software development industry that doesn't even know how to filter for "it".

srean 2 hours ago|||
It's usually not even the display.

When I go on a trek, the end of trek landmark is nowhere nearly as significant as the experience of reaching it.

If I were to be magically transported there without the lives experience it would take almost all of the joy out of it. Some people get a kick out of doing hard things that are interesting but seemingly beyond one's ability. Making it an easy commodity spoils the fun.

As for teleportation, if it were, say, trip to moons of Saturn I can make exceptions.

MagicMoonlight 2 hours ago|||
Nah. I'm not going to yearn for the days of hitting steel on an anvil when we can have steel produced in a factory.
moregrist 2 hours ago||
Have you ever done blacksmithing? It’s tremendously satisfying.

Sure, if you want 300,000 spoons, it’s far better to use a factory process and get essentially identical results. But if you only want a few spoons and accept (or even value) that the spoons will all be a little different, hand-forging them is quite enjoyable.

I’ve written enough assembly and done enough blacksmithing to know that the metaphor isn’t quite apt. But there’s both tremendous effort and satisfaction involved in both.

estebarb 4 hours ago||||
It has always been possible to do it. LLMs are not a particular enabler for that.

The difference is that now it is worthless: there is no learning, no person caring about the result, nothing aspirational for the public to look towards... we used to enjoy those challenges, used to be proud of solving complex problems... now? Yeah, whatever, execute execute commit push, let another LLM "review" and call it a day.

menzoic 4 hours ago|||
The difference is not that it’s “worthless”. The difference is that now it’s “practical” to implement given the low effort.

I wouldn’t be sad about defeating lower complexity challenges. There are always higher complexity challenges that arise once we start operating in a world when you can do more. The bar raises.

rdevilla 4 hours ago||
The point is the death of the celebration of excellence and technical mastery.

Once insurmountable challenges are now trivial to implement with, as you say, "low effort."

For those who were attracted to computing by the grind and the grand narrative that you, too, with sufficient effort, discipline, and merit, could become a revered craftsman, LLMs trivialize an entire lifetime of practice. I can't think of anything more demoralizing.

ratorx 1 hour ago|||
If your goals were fame, then yes. But you can still pursue excellence even if there is an alternative “easy” path.

The equivalent is something like hand tool woodworking - it’s still a thing despite the advent of machines, but more of a niche. You can still aim to become excellent, but maybe you won’t be famous.

CoastalCoder 45 minutes ago||
> but maybe you won’t be famous.

Or employable. Which sucks if you're over 50.

_factor 1 hour ago||||
Did hammers obviate the technical mastery of finding a suitable rock? Or did they elevate the definition of “technical mastery”?
ninalanyon 1 hour ago|||
Would you apply the same reasoning to the building of horse drawn carriages and mass produced motor vehicles? A hand built PDP-11 to a Thinkpad?
locknitpicker 3 hours ago||||
> The difference is that now it is worthless

Writing whole software projects in assembly has been worthless and pointless for a couple of decades now. Even the projects who can put together a solid case will limit assembly to very specific components executed only in specific bits of a hot path. Perhaps the most performance-sensitive code we have today is high frequency trading and that field is dominated by C++.

Also, virtually all mainstream compiler suites have flags that output assembly,and that feature is largely ignored and unused.

wtetzner 1 hour ago||
The point is that these projects had worth because of what the programmer got out of the learning process, not because of the end result.
lofaszvanitt 2 hours ago|||
Yep, another humane thing going to get killed, because people are naive, gullible and basically idiots handing out their expertise on a platter to faceless corpo entities.

What's next, human human contact abstracted away by brain stimulation?

And the transhumanist arsewipes gonna have a field day.

Never too late to ignite the nukes...

wartywhoa23 1 hour ago||
> What's next, human human contact abstracted away by brain stimulation?

Of course! Corona/junta/scarecrowvirus don't transmit over the wire, while ads, taxes and surveillance do alright!

andyjohnson0 32 minutes ago||||
> Got an idea that you'd need assembly language for - now you can do it instead of..... never doing

But you're not doing it. The ai is doing it.

If the op can write a web server in assembly language then I'm pretty sure they could have done it in a higher-level language. But they did what they did for the journey and the learning along the way. Vibe coding it omits all that, and misses the point of the exercise.

behaviors 3 hours ago||||
I do believe this is just a next step in languages. We've come this far trying to make code NLP, now we have the closest thing to a translator in our generation. It's an exciting time, just don't pay attention to talking heads.
georgemcbay 4 hours ago||||
> Got an idea that you'd need assembly language for - now you can do it instead of.....

Nobody actually needs a web server built in assembly language, it serves no practical purpose. And I say that as someone who learned to program 6502 assembly language in 1983 and has sporadically used assembly of various architectures since.

The absurdity of building it would have been the curiosity draw pre-LLMs, but when it existing is just a series of prompts away it really loses all of its meaning.

But yeah... hooray for AI. Can't wait until we learn to harness it to supercharge the most important and valuable thing we do as a human society in modern times: stuff increasingly intrusive ads in front of everyone at all times.

mcintyre1994 4 hours ago||
> Can't wait until we learn to harness it to supercharge the most important and valuable thing we do as a human society in modern times: stuff increasingly intrusive ads in front of everyone at all times.

Wasn’t it used for that before anything else? Google invented transformers and had LLMs internally before chatgpt got released. Presumably they were using them for ads, because their public demos were insane things like talking to the moon.

pixelesque 3 hours ago||
> Wasn’t it used for that before anything else? Google invented transformers and had LLMs internally before chatgpt got released.

According to friends who worked at Google (no direct knowledge myself, so don't know exactly how true it is), they mostly sat on the tech. Google News had internal prototypes of using them to expand/contract/summarise and/or add details/context to news articles and translate them to different languages, but it was never fully productised.

Then after ChatGPT got popular, sudden panic to start using them in products company-wide.

pjmlp 2 hours ago||||
Which is why now companies can happily reduce head count.
dinkumthinkum 4 hours ago|||
> without the limitation of your ability to hand code it.

Isn't that kind of view pathetic and sad, though? Why would anyone pick up and guitar or play a piano if they could just listen to the same song already made by someone else? I struggle to understand this view of people that pretend to not understand why being an expert of some skill is perceived as valuable by some people. This is also belies next problem with this line of thinking which is that it says "we don't need to learn X to do Y because we have AI" but misses the same AI could easily replace the need to have you think to do Y in the first place. I don't know.

vladms 2 hours ago||
In my experience people that did not hand code enough imagine that the hard part is coding, and not clearly defining all the possible edge cases and use cases.

So, in my view, more people will (or should) understand now what is hard when building complex things, if they pass the stage of "I have a nice POC that works for this one case".

wkjagt 25 minutes ago|||
It doesn't diminish the art form though. If anything, I value these kinds of hand written projects even more now that so many people are pulled in by AI doing their projects for them in a fraction of the time and effort. I love doing these kinds of projects, and I love writing assembly, but I must admit that the temptation of just copy pasting generated code is big sometimes, because it's _right there_. In this context, seeing someone handwriting something awesome by hand is even more valuable to me.
designerarvid 3 hours ago|||
I think that the analogy of recorded music best captures your feeling. Not the exact technological and economic transformation that is happening, but the feeling.

Some 120 years ago recordings music was a living phenomena produced in the moment. Musicians worked at restaurants and coffee shops everywhere, being useful without being super stars.

Music didn’t disappear with recordings, but the works is certainly different.

qingcharles 4 hours ago|||
The answer is "no time at all." I used Gemini Ultra earlier this year to see how well it would do with some really gnarly assembler. I asked it to write a whole flat-shaded 3D engine in 8086 assembler that would run in CGA on an original XT and it one-shotted it in a couple of minutes.

https://imgur.com/a/Dy5rUku

BuyG1n 1 hour ago|||
Haven't used LLMs for assembly yet, I did try to use it on some DSLs with few docs, the results were much less impressive than those with popular, higher level languages AI companies scraped a gazillion repos for.
aurareturn 1 hour ago|||

  I mourn the death of a human artform.
So what art form can a human make with an LLM assisting?
isatty 4 hours ago|||
Human artform is still alive and well as evidenced by this post.

Yes, an LLM can write it, it’ll probably work. Yet, it’ll remain meaningless slop while this is not.

alex_suzuki 2 hours ago|||
The problem, at least for me, is that by now I'm so desensitized that I won't even bother looking at something, because it could potentially be the product of a few prompts. The LLM noise is drowning out the human signal, so to speak. Same for articles, blog posts, etc. It only takes a few em-dashes, a few "it's not this, it's that" to lose faith in the text's authenticity, and with that, any interest in its content.
tapland 2 hours ago|||
[flagged]
locknitpicker 3 hours ago|||
> Ten years ago, I would have kowtowed to someone elite enough to build something like this.

I'm afraid it's an elite skill in the sense that juggling is also an elite skill. It's impressive for the first few seconds you gaze into it, but once the novelty factor wears off you understand that it's wasted effort that leads to a project that suffers from a massive maintainability problem, is limited in which platforms it can run, and brings no advantage whatsoever. It's an gimmick that has no practice use.

This is the software development equivalent of an amateur guitarist posting shredding videos on YouTube.

fuzzy2 2 hours ago||
What an odd take. It is often titled "software craftsmanship". Is the craftsman not allowed to practice? Not everything needs an immediate real-world application. Not everything needs to be enterprise-grade, bulletproof, web-scale or whatever. It needs to work for the creator, and sometimes not even that.

In the same way we appreciate Japanese wood joinery, why not not just appreciate this? Someone might even learn a trick or two reading it.

locknitpicker 2 hours ago||
> What an odd take. It is often titled "software craftsmanship".

No, not really. This is exactly the opposite example of software craftsmanship. Software craftsmanship involves things like technical excellence in delivering maintainable software that is adaptable to change.

Picking assembly, of all things, for a web server represents a complete failure in the analysis of both the problem and solution domain.

https://en.wikipedia.org/wiki/Software_craftsmanship

This sort of project is more in line with parlour tricks, juggling, and stunt shows. Trying to frame this sort of project as software craftsman is like discussing the whole Jackass series as cinema next to Hitchcock and Scorcese. It may take skill and practice to be punched in the nuts, but that doesn't make it a craft.

pocksuppet 15 minutes ago|||
Would a craftsman not become a craftsman by honing his or her skills on seemingly pointless projects?
wartywhoa23 1 hour ago|||
> Software craftsmanship involves things like technical excellence in delivering maintainable software that is adaptable to change.

To which change, exactly?

altmanaltman 4 hours ago||
I get what you mean but I feel this new profound yearning for "hand-crafted" code is getting a bit out of hand. Software engineers have taken shortcuts whenever possible since software was a thing. Do you also mourn that we don't code airplanes by hand anymore (i.e. the death of the "craft of coding").

We need to stop thinking of software as carpenters where the magic is some physical skill and that is the "CRAFT WE MUST PROTECCT".

And at least your comment was grounded in reality; a lot of people I talk to (who are not coders) seem to think a good software engineer writes every line and every word with thoughtful genius and AI just spams code so one is better than the other. And they are convinced its some naunced smart take and they understand software development on a inner level or whatever.

And the base assumption still holds true (pure AI-generated code is garbage) but its mostly because its badly designed and is still a pretty poor architect. And there is a need to pushback against slop but why do we need to elevate typing code as if its some sacred acctivity? Most of the work a good coder does is in their mind with little connection to the phyiscal reality of the world.

Thanemate 5 hours ago||
I'm oddly enthusiastic about seeing someone who beings the HACKER in HackerNews. But at the same time, this made me remember the days when display of skill and craftsmanship were rewarded in the industry.

Maybe it's finally time to move on from being a career programmer.

noduerme 5 hours ago||
What a dismissive comment. Now that anyone can have an LLM write code for them, the only people who have value to bring to a project are the ones who can improve upon the LLM's output. That is, the ones who have a deep enough understanding of the logic and language. And the only people who will ever be in that position are the ones who take the time and effort, out of sheer curiosity, to learn how things work. Whatever your alternative is to this, there is no future in the alternative.
dwedge 4 hours ago|||
Artisanal code has a future. Maybe not a high paid one but maybe we go back to roots. if you enjoy programming and were never focused on output or on pipelines, LLM doesn't offer the same ezperience
noduerme 3 hours ago||
Sometime around when wordpress came out, or at least 2005 or so, I started positioning myself as a bespoke web designer, then app developer. Whereas anyone could get a site done, I turned myself to doing things that hadn't been done before, for which standard solutions wouldn't fit. I turned away 80% of jobs and raised my rate from $25 to $100, then to $300/hr. To me, pricing and only doing bespoke work was a defensive measure against falling into a career hole I didn't want to end up in. But mostly it was just that I didn't want to repeat myself or waste my time doing something that a client could already buy off the shelf.

Artisanal code, or bespoke code, has always been the best paid and most satisfying work. If we no longer have a new generation of curious people who enjoy solving hard problems, it's only going to become more valuable.

yolo3000 2 hours ago||
So what could you do that people paid you 300/hr? And how long where these gigs?
noduerme 1 hour ago||
Basically coding, explaining, and owning the whole stack from the DB schema to the CSS. In 2005 that meant a client wanted a website but it needed to be driven with live data from a database, with a custom back-end they would use to update it, something that wordpress wouldn't be able to do easily. Or they wanted a data-driven Java or Flash applet embedded, dynamic resizing, or "mobile-friendly" circa 2008. I had worked for a company in 1999 making websites, split between designers (like me) whose job was to make Photoshop comps with rollover layers and split them up into tables, and the "webmonkeys" who got paid more to take that and mess with the javascript in Dreamweaver. The guys who knew how to tie that into Coldfusion or something made the most. Primitive HTML and PHP and inline javascript and mysql. I just figured out how to do all of it together. Then, web apps, multiplayer games front/back, and starting to get into logistics software. Typical gig from 2005-2010 was 9-12 months, single project stuff, hourly and freelance.

What I realized was that knowing what my software did, being able to explain every part of it and being able to rewrite it from scratch if necessary, was much more valuable than just delivering it. The powers that be who run companies are looking for communication, so they understand what they're getting, someone who can speak the same language as them and materialize it into code that works. LLMs are a decent imitation of that, but they're fatally flawed, because they never understand a whole stack.

dinkumthinkum 4 hours ago||||
I don't see it as dismissive, maybe you two are talking past each other but seem to be on similar side. I think the parent just articulated a sense of resignation that many people probably share. I think you might be saying that maybe there is still some shred to hold onto, possibly.
shevy-java 4 hours ago|||
I don't see anything dismissive here. It is a realistic assessment: if the choice is between code generated by AI or code generated by a human, and the AI is better in an objective manner, then why should a company employ a human? I refer here solely to the code result; naturally humans may do things AI can not do yet, but if the question is solely about code quality and AIs are better here, then why would that comment be dismissive rather than realistic?

> And the only people who will ever be in that position are the ones who take the time and effort, out of sheer curiosity, to learn how things work.

People learn something new all the time, AI does not learn anything, it just simulates and hallucinates. But the core question is not addressed with that. What would you do if you have to compete against AI, and AI is better? We already see these with the new generation of humanoid robots from China. Those things make Boston Dynamics robots look like tinker-toys in comparison - already as-is. Give it ten more years and we finally reached AI skynet for real.

noduerme 4 hours ago||
What do you mean when you say AI code is better? I am looking at AI code all day and it's just garbage that happens to work for whatever feature was requested... in no way is it better code. Any human who was so careless as an AI to commit such atrocities would be fired.
lofaszvanitt 2 hours ago||
success through perseverance and toughness - fucked by AI

success through cleverness and inventiveness - not yet fucked by AI

achievement through stubborn persistence - you can still dig deep holes in the garden

you still could have a character, if you were lucky

human agency? not yet fucked up, but it's gonna be

achievement earned through one's own qualities or effort? - intact somewhat

stbev 5 hours ago||
I am attempting to write a software renderer in WebAssembly because, for some reason, I feel the need to go against the direction this vibe coded world is going, and I want to feel challenged again. I don't know if I will ever finish it, it is crazy, and by no means useful. But gosh it feels so good.

Congratulations to the OP for the accomplishment.

polaris64 2 hours ago||
I did exactly the same and it was so much fun. It wasn't about bringing anything novel to the table, it was just a fun challenge for myself. I finished and now I'm writing a game using it, although now the challenge has gone I am not making much progress on that. But never mind, I had fun! I wouldn't have had that fun or satisfaction if I had vibe coded it instead.
qingcharles 3 hours ago|||
As in 3D software renderer? I cut my teeth on those throughout my teens and the start of my professional career, in x86 and C.

I wanted to see how an LLM would do writing one in pure 8088 assembler for CGA and it one-shot a nice demo (I fed it the vectors for the Elite ship in the prompt):

https://imgur.com/a/Dy5rUku

stbev 2 hours ago||
Yes, exactly, a 3D software renderer. But the goal is to do (almost) everything from scratch and by hand. No LLMs, no std library, no compilers. Just a few imported math functions (such as sin and cos). Not the same as bare metal programming but close
MagicMoonlight 2 hours ago||
Why would you screw yourself like that when it's already a huge project?
moregrist 1 hour ago||
Why do people rebuild classic cars or remodel old houses by themselves? Because they enjoy the work itself and the learning process.

You don’t have to. It’s perfectly okay to take your modern car to a mechanic and hire a contractor for your remodeling needs.

But some people like to do it themselves, even when the project is large.

PacificSpecific 5 hours ago||
Please post your progress! That sounds cool as hell
stbev 2 hours ago||
Thank you! I will keep working on it and post something here
matteohorvath 3 hours ago||
It's a beautiful project, well crafted. To reflect to the other comments, projects like this are more like a Minecraft map for me. There are giant and amazing maps, small survival maps, local hosted for my friends and myself, and commercial focused high scale servers. Building a house, or designing a new road in the server became extremely easy with AI, put the value created in the world depends on the original purpose of the server and whether creating more houses and roads actually makes sense. I think it's a super thing that commercial server can build out faster and be bigger with more houses and roads on it, but The love an art project creates in the world is incomparable.
openclawclub 1 hour ago|
[dead]
tgma 4 hours ago||
If you actually start writing big stuff in assembly, esp a macro-assembler, you'd quickly realize it is more verbose, but not fundamentally that different from higher level programming. You basically need to get a hang of how to build abstractions with procedures and macros and you'd be good to go. Reading assembly effectively is often much harder than writing it.
imtomt 3 hours ago|
Yeah, that's what I realized during this, too. You need to be much more explicit, but the way any given function works isn't fundamentally different. "strlen" will always iterate through a string searching for a NULL byte whether it's in C, Rust, Assembly, or whatever other language. I think it can feel almost more straightforward than other languages, since you're laying out exactly what the CPU needs to do, in what exact order.
wkjagt 47 minutes ago|||
> "strlen" will always iterate through a string searching for a NULL byte whether it's in C, Rust, Assembly

Not all languages use NULL terminated strings. I think Rust actually stores the string length alongside a pointer to the start of the string data. You can do the same in C, but you'd have to do it manually using a struct. In assembly you could do the same thing since you get to decide basically everything.

https://www.youtube.com/watch?v=y8PLpDgZc0E

sureglymop 3 hours ago|||
Agreed. And super cool project. After seeing Matt Godbolts Advent of Compiler Optimisations in December I decided to do AoC in assembly. Was the most fun I had in years even though I didn't finish all days!

And super educational. Since then I've been pondering which problems require dropping down to the assembly level. E.g. implementing a JIT compiler, a coroutine runtime, etc.

trollbridge 8 hours ago||
Gave me a warm feeling to know that someone would actually still bother to do this by hand. I'm not the only one!
imtomt 7 hours ago|
Thank you! I've been obsessed with this idea for a while, finally decided to start on it, then obsessed over it for a couple weeks. I'd love to see some of your projects if you have anything similar, I'm glad I'm not the only one too! I think most programmers would benefit a lot from taking a few weeks or months to try and learn some assembly, and demystify how CPUs and compiled languages work.
behaviors 4 hours ago||
Well done. Been working on a similar smaller project for RISC-V. This is excellent
imtomt 4 hours ago|
That's so cool! I would love to see it if you're sharing it anywhere.
behaviors 2 hours ago||
It's a HTML browser for Pi Pico2, CLI, meant to support my in-house project running on a mesh of Pico2's. I really wanted to use RISC-V and it needed a webhook that serves a page on PIO wake. We are at the browser is written about 60%. The server is now already handled ;P I found this awesome project someone posted on HN. When I complete my project the browser will be released alongside. You can very likely reproduce it with less than a handful of prompts. One thing I really do believe, ideas are going to be the next open-source. LLM's can make ideas into things.
chrisweekly 8 hours ago||
That fake O'Reilly book cover is pure gold.
imtomt 8 hours ago||
That book is exactly what inspired me to make this in the first place, haha. The subtitle of the book gave me the acronym I named it.
____tom____ 5 hours ago||
Fauxreilly!
dddddaviddddd 5 hours ago||
Even though it's a meaningless comparison, I'd be interested to see how performance compares (max requests per second?) for this compared to fully-featured web servers.
imtomt 5 hours ago||
Honestly haven't benchmarked it, but I would imagine ymawky would be considerably slower than most fully-featured web servers. ymawky uses fork-per-connection, which is fundamentally slower than what production servers like nginx or Apache use. nginx uses event-driven IO (kqueue/epoll), which can handle thousands of concurrent connections without the overhead of forking the process on each request. Apache uses pools of threads which handle multiple connections without needing to be spawned per-request. A head-to-head against any other web server would mostly measure "fork-per-connection vs event loop/thread pools", which assembly has nothing to do with.

In a comparison between a similar fork-per-connection server written in C and this, I would imagine the throughput would be about the same, because the bottleneck in this model is fork() itself rather than the actual code. It probably matters more for binary size and startup time than requests/sec. Would be fun to actually benchmark, though.

arrty88 5 hours ago||
Should i ask my Claude to benchmark it against nginx or will you ask yours
marc_g 5 hours ago|
This is cursed and wonderful. I especially appreciate status code 418. I hope I run into that in the wild one day, then I'll think of you!
More comments...