Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Unix filesystem inodes and file descriptors stick around until they are closed, even if the inode has been unlinked from a directory. The latter is usually called "deleting the file".

All the stuff Erlang does.

Static linking and chroot.

The problems and the concepts and solutions have been around for a long time.

Piles and piles of untold complexity, missing injectivity on data in the name of (leaky) abstractions and cargo-culting have been with us on the human side if things for even longer.

And as always: technical and social problems may not always benefit from the same solutions.





Ok so let's say you statically link your entire project. There are many reasons you shouldn't or couldn't, but let's say you do. How do you deploy it to the server? Rsync, sure. How do you run it? Let's say a service manager like systemd. Can you start a new instance while the old one is running? Not really, you'll need to add some bash script glue. Then you need a loadbalancer to poll the readiness of the new one and shift the load. What if the new instance doesn't work right? You need to watch for that, presumably with another bash script, stop it and keep the old one as "primary". Also, you'll need to write some selinux rules to make it so if someone exploits one service, they can't pivot to others.

Congrats, you've just rewritten half of kubernetes in bash. This isn't reducing complexity, it's NIH syndrome. You've recreated it, but in a way that nobody else can understand or maintain.


Now I see how it could have been confusing to read.

Cannot edit anymore so amending here:

Static liking and chroot (not as The One True Solution (TM)) but as basically Docker without Linux network namespaces.

Linux/Docker actually wound up improving things here. And they got to spend all the money on convincing the people that like advertisements.

And static linking mainly only becomes relevant (and then irrelevant again) in C because if boundaries between compilation units. SQLite throws all of this out. They call it an amalgamation (which also sounds better than a "unity build").

The tools are there. They are just overused. Look at enterprise Hello World in Java for a good laugh.

————

If your data lives in a database on another end if a unix or TCP socket, then I still don't see "NIH". The new binary self-tests and the old binary waits for a shutdown command record and drains its connections.

Kernels and databases clock in at over 5M lines of code. NIH seems like missing the point there.

And most services neither need nor have nine nines of uptime. That is usually too expensive. And always bespoke. Must be tailored to the available hardware.

Code is less portable than people believe.

Ten #ifdef directives and you are often dead on arrival.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: