HNHacker News
TopNewBestAskShowJobs

nickelpro

2,445 karma · joined December 21, 2019

https://vito.nyc
submissionscomments
nickelpro··on Advent of Compiler Optimisations 2025
You're an expert, you're overestimating the competence of the median programmer.

That's a great bug you found, and of course it is a compiler bug, not UB.

99.9% of the bugs I've dealt with of this sort were just pointer aliasing. Or just use-after-free. Or just buffer overruns.

The median programmer, especially in the good ol' days, wrote UB code about once every 6-10 hours.

nickelpro··on Advent of Compiler Optimisations 2025
People keep saying "O3 has bugs," but that's not true. At least no more bugs than O2. It did and does more aggressively expose UB code, but that isn't why people avoid O3.

You generally avoid O3 because it's slower. Slower to compile, and slower to run. Aggressively unrolling loops and larger inlining windows bloat code size to the degree it impacts icache.

The optimization levels aren't "how fast do you want to code to go", they're "how aggressive do you want the optimizer to be." The most aggressive optimizations are largely unproven and left in O3 until they are generally useful, at which point they move to O2.

nickelpro··on Advent of Compiler Optimisations 2025
Unity builds have been largely supplanted by LTO. They still have uses for build time improvements in one-off builds, as LTO on a non-incremental build is usually slower than the equivalent unity build.
nickelpro··on Why xor eax, eax?
Except for `xchg eax, eax`, which was the canonical nop on x86. Because it was supposed to do nothing, having it zero out the top 32-bits of rax would be quite surprising. So it doesn't.

Instead you need to use the multi-byte, general purpose encoding of `xchg` for `xchg eax, eax` to get the expected behavior.

nickelpro··on What they don't tell you about maintaining an open source project
> The community doesn't need to be a 'house party,' but the license guarantees the right for a community to form when the original author walks away.

Which is why the license is the only thing that matters. Without the license you don't have the community. It will happen with some code, it won't happen to other code. Without the license, or without the code, it never happens.

The only thing you need to do as an open source software developer is release your code under an open source license. You don't need to respond to or even maintain an issue tracker, you don't need to accept MRs into your upstream, you don't need to care about anyone else using your code.

Open source places no other obligations on a developer other than the license. To say otherwise is to fundamentally misunderstand what open source is.

nickelpro··on What they don't tell you about maintaining an open source project
> That is obviously false...

It is fundamentally true. You cannot have a Pokemon community without Pokemon, a knitting community with yarn, or a software community without software.

> Technically true

You should have stopped here. It is true. Period, full stop. Everything else is fluff.

> The vast majority of software which can technically be described as "open source" is mostly inconsequential to computing or anyone's lives.

This is because the open source software movement was so overwhelming in its success it became the norm.

> He didn't need to invent a social movement and philosophy to fix his printer issue.

Yes he did. The philosophy is about the freedom to fix your printer. It is not about engaging others to fix your printer, or obliging maintainers to fix your printer.

Those things are follow ons to the core philosophy. Once you have the freedom to fix your printer, you can form communities of people also interested in fixing printers. The freedom comes first.

> Whether the original developers supported it or not is irrelevant.

It's literally the only thing we're talking about. Open source enables others to come along and support software abandoned by or simply never championed by its original creator. Without open source you do not have those later "someones".

nickelpro··on What they don't tell you about maintaining an open source project
> Stallman just cared about code, like fixing his printer, and not a whole social movement?

Stallman created a social movement that just cared about code, yes. He needed the social movement to create an environment in which he could fix his printer.

The social movement was about the license and the code, not about providing support for, documentation of, or continuing development of any particular code.

By creating an environment where code is open, you allow for communities to organically form around code and maintain it. Without the environment, without the code and the license, the communities cannot form.

nickelpro··on What they don't tell you about maintaining an open source project
You have this entirely backwards. Open source is, definitionally, the code and a license. It is "first and foremost" those things. The community of people cannot exist without the code and the license. The code and the license can and often does exist without dedicated communities.

Everything else in open source is a cultural projection entirely ancillary to the code and the license.

> I'll just say that if you think otherwise, whatever good you think you're putting out into the world, is not much better than keeping the software proprietary.

I have never seen someone so entirely miss the point of open source. This is not a house party, this is not a community support network. There are genuine disagreements about open source philosophy, if it should be more focused on user freedoms or developer convenience, but they are all incompatible with the idea that open-source licensed code in and of itself "is not much better than keeping the software proprietary".

Stallman did not invent the GPL because he wanted an issue tracker and complete documentation from HP. He invented the GPL because he needed to fix his printer drivers.

A ton of very important open source code was thrust into the world, created immense value, but was never further supported or developed by its original developers. Off the top of my head: git, Doom, Bitcoin, and basically everything Fabrice Bellard has ever done.

nickelpro··on What they don't tell you about maintaining an open source project
Ya OP is shadow boxing. There is absolutely no need for any of these things.

Tons of open source exists as only source code and a license, nothing else. No docs, no issue tracker, nothing. People who need it use it, learn from it, remix it, whatever, but there need not be any engagement at all from the given repo's maintainer.

nickelpro··on Please donate to keep Network Time Protocol up – Goal 1k
The reference implementation, while historically important, has largely been displaced by more secure/performant implementations (ntpsec, chrony), or by in-house implementations (Amazon, Google).

Notably NTPd doesn't support leap-smear, which means those who absolutely must have monotonic time can't use it at all.

nickelpro··on Uv is the best thing to happen to the Python ecosystem in a decade
Sure, but you can have pet venvs with uv too.

These are tools, if you choose to hold them wrong no one can stop you. uv didn't invent the screw driver or the knife, its novelty is as a Swiss Army Knife which put them all in one.

nickelpro··on Uv is the best thing to happen to the Python ecosystem in a decade
This is a key tenets of venvs generally, uv didn't invent anything, it simply brought them under one roof and improved perf.
nickelpro··on The Linux Boot Process: From Power Button to Kernel
UEFI is an interface implemented by firmware (literally, Unified Extensible Firmware Interface), it's not the firmware itself. Saying "it starts the machine" is a bit of a nomenclature faux pas. The firmware starts the machine, you talk to the firmware via UEFI.

This post skips all the interesting things in the modern firmware dance. Not the least of which is when you call ExitBootServices() you're already in long mode. There's no need for the journey through real and protected.

nickelpro··on Summary of the Amazon DynamoDB Service Disruption in US-East-1 Region
The Droplet lease timeouts were an aggravating factor for the severity of the incident, but are not causative. Absent a trigger the droplet leases never experience congestive failure.

The race condition was necessary and sufficient for collapse. Absent corrective action it always leads to AWS going down. In the presence of corrective actions the severity of the failure would have been minor without other aggravating factors, but the race condition is always the cause of this failure.

nickelpro··on Summary of the Amazon DynamoDB Service Disruption in US-East-1 Region
To quote Grandpa Simpson, "Everything everyone just said is either obvious or wrong".

Pointing out that "complex systems" have "layers of defense" is neither insightful nor useful, it's obvious. Saying that any and all failures in a given complex system lack a root cause is wrong.

Cook uses a lot of words to say not much at all. There's no concrete advise to be taken from How Complex Systems Fail, nothing to change. There's no casualty procedure or post-mortem investigation which would change a single letter of a single word in response to it. It's hot air.

nickelpro··on What Unix pipelines got right and how we can do better
This looks and reads like AI slop.

Also viewing Unix pipes as some special class of file descriptor because your Intro to OS professor didn't teach you anything more sophisticated than shell pipe syntax is kinda dumb.

File descriptor-based IPC has none of the restrictions discussed in this article. They're not restricted to text (and the author does point this out), they're not restricted to linear topologies, they work perfectly fine in parallel environments (I have no idea what this section is talking about), and in Unix-land processes and threads are identically "heavy" (Windows is different).

nickelpro··on Abstraction, not syntax
pyproject.toml calls into a build backend which is... Python.

It is good to have a simple, declarative entry point to the build system which records declarative elements of the build. The non-declarative elements of the system are configuration-as-code.

nickelpro··on Abstraction, not syntax
Yes, one more DSL on your Tower of Babel tech stack will save you.

If you want configuration-as-code use Python. Please. Or Tcl if you must. Do not invent N+1 DSL for your engineers to waste time learning.

nickelpro··on Python 3.14 is here. How fast is it?
Personally: cpyext always lags changes in the CPython ABI and headers which my code relies on, or I'm relying on internals which cpyext doesn't implement at all
nickelpro··on Doing Rails Wrong
You don't have any concrete complaint beyond the number of tools, and the nebulous idea that solving the problem each addresses within a smaller ecosystem would be somehow better.

Removing ESLint means... you don't have a linter. It doesn't have an upside. Removing Tailwind means you need to write more verbose CSS. Removing Babel means you have to use older JS idioms for browser compatibility. Etc.

nickelpro··on Doing Rails Wrong
That's like saying the Unix philosophy adds complexity because it dictates a tool should do one thing well. Composition of tooling (consisting of many individual tools) is the basis for lots of rock-solid stacks.

I don't think the Unix philosophy is universally correct either, but "too many tools" is a complaint without much consequential basis. It's an aesthetic problem not a functional one.

nickelpro··on Without the futex, it's futile
You're right. I had students complain about this all the time at both the undergrad and grad level, that academic material often seems like it's teaching them wrong as a joke.

The correct way to teach material at the collegiate level is to teach it correctly. Useful lies and omissions are for grade school. Where material is simplified for narrative clarity, it should be in a framing that immediately points to the materials for the more fully correct information.

nickelpro··on Without the futex, it's futile
It doesn't matter if the ancient Egyptians were the first ones to await multiple event sources.

What matters is where the designers of the system in question got their inspiration. If they learned it from Windows, they're aping Windows. If they invented it independently, they're not imitating anyone at all.

nickelpro··on The Missing Protocol: Let Me Know
Then it's not a missing protocol. The protocol is RSS. They want some specific app that is doing a thing with RSS.
nickelpro··on I solved the century-old mystery of a shipwreck survivor
To discover what Davidson said required tracking down an undigitized newspaper article from 1914, the existence of which was only known about by tracking down the living descendants of the man's brother.

Hardly clickbait.

nickelpro··on A Mental Model for C++ Coroutine
If you want fibers there are ample mechanisms already available to implement them, they don't really benefit from specialized language machinery
nickelpro··on A Mental Model for C++ Coroutine
Random switching between "Awaitor" and "awaiter" makes it seem like these are distinct concepts instead that the reader is supposed to understand.

In general this moves way too fast for the density of the grammar it's trying to introduce, lines like:

> We have seen Awaitors already - suspend_always is an empty awaiter type that has await_ready returns false always.

But we haven't "seen" suspend_always, it's mentioned in half a sentence in an earlier paragraph, with no further context or examples.

There's a reason Lewis Baker's writings about C++ coroutines are 5000 word monsters, the body of grammar which needs to be covered demands that level of careful and precise definition and exploration.

nickelpro··on At Least 13 People Died by Suicide Amid U.K. Post Office Scandal, Report Says
I recommend you read the report. The charges were brought solely on the claimed accounting shortfalls with no further evidence that the postmasters and sub-postmasters did anything wrong, not even an attempt to discover where the money had gone or anything resembling forensic accounting that would be required in similar US cases.

In the most shocking case, with Martin Griffiths, there were attempts to hold him responsible for robbery loses he had absolutely nothing to do with:

> On 2 May 2013 a robbery occurred at the Post Office which resulted in a net loss to the Post Office of £38,504.96, which was reduced to £15,845 after some of the money was recovered. Mr Griffiths was injured during the robbery; he was present in the branch when it occurred. The Post Office Investigator advised the Post Office that Mr Griffiths was partly to blame for the loss sustained by the Post Office and that he should be held responsible for part of the loss. [1]

Such a claim wouldn't even be colorable in most jurisdictions.

I disagree that anything similar could happen at this scale in the US or France. Individual cases might not be handled perfectly, but this is a systemic miscarriage of justice where at every turn individuals were prosecuted without any evidence of individual wrongdoing. It was believed money was missing, no attempt was made to discover how it went missing, and the post-masters were held responsible without further inquiry. The legal system upheld these non-findings as facts and convicted people based upon them.

[1]: Post Office Horizon IT Inquiry, 3.49

nickelpro··on At Least 13 People Died by Suicide Amid U.K. Post Office Scandal, Report Says
The bug is hardly the problem here, it is necessary but far from sufficient for something like this to happen.

The UK legal system's ability to prosecute and penalize people without anything more than circumstantial evidence makes it unfit for purpose. It should be an embarrassment to a country that considers itself a member of the developed Western world.

nickelpro··on Being too ambitious is a clever form of self-sabotage
I'm not Ira Glass, I have no idea what he meant. I would argue that taste-skill gap doesn't exist in writing either.

You either know what you want to write or you don't. If you hate the words you wrote, write something else. If you don't know what you want to write, that's undeveloped taste, not a gap preventing your from expressing your good taste.

← PreviousPage 3 of 21Next →