I admire Fabrice Bellard. He is almost certainly a better overall programmer
twitter.com739 points by apitman 13 hours ago
739 points by apitman 13 hours ago
https://xcancel.com/ID_AA_Carmack/status/2064095424420487226
Reading the list of Bellard's contributions, what strikes me is not the raw ability (although certainly there is that too!) but "damn, he knows how to pick 'em!" He keeps picking stuff to work on that ends up being insanely useful to a massive number of people. That seems somehow even more remarkable than the technical ability. Deciding what to work on might be the most important question in life. Maybe, but you could also look at it from another angle. Taking something that’s traditionally been hard and making it dramatically easier, better, and faster unlocks pent-up downstream use-cases. I’m sure it’s some degree of both selection and execution, but so many industries have been unlocked simply because somebody showed up and figured out how to make a previously difficult thing easy. My guess would be the hueristic is "I want to do simple thing, why is it so hard?" (Modern computing has an overabundance of "DX tarpits".) Which is funny because, everyone has that experience, right? But then approximately nobody proceeds to do something about it. (Including most people who have the skills to make a difference!) Like, that's surprisingly mundane, and surprisingly actionable. --- If we distil it into a philosophy, it would be something like... - things should be good - they are not so good - I can learn to make them better And more broadly: "You can just do things" As an extension to your last point, here in the US people love complaining about politics (on both sides) but very few people (including me!) take the time to come up with solutions and go to town halls, or write to senators apart from the automated message that makes you feel like you did a thing, or even run for office. Of course, all of those are hard! And I think that speaks to the modern tarpits. No one set out to make a tarpit, it just happened and it's hard to make it perfect. A big hidden in plain site facet of this, is few are willing to put forth the work within the existing system. That is, going to town halls, writing senators, and running for office are all standard parts of the system people are complaining about. And they are offering the complaints, largely, as stand in complaints for whole hosts of problems that they actually think are there. So, agreed, few are willing to ignore their general nebulous complaints and get into the system to work with it. They dream that there will be some magic shift of everything away from their complaints. My only twist is I think this is ok, as long as people stay grounded in the rest of their life. It is perfectly fine to dream. Is mostly fine to complain. No need to dirty the water where people are getting things done, though. I don’t know, it wasn’t until the pandemic and a layoff that I had time to actually sit and think. There’s a reason that most of the voters (and protesters in my area) are retired, and it isn’t apathy. I don’t have time to educate myself on these topics in any real depth. And I need to educate myself because the push information is all bullshit. Digging into policing in Seattle, the official and public conversation was all culture war while the actual problems looked like simple incompetence from a system analysis perspective. I don’t have the bandwidth to deal with this kind of fumbling on every topic, and I’m realizing that my parents didn’t live in a low-trust society like I do. We don't disagree? But this is part of the problem of many complaints. The cost of entry into any system is non-zero. That people with more resources are involved is not at all a surprise. Which is why I have my "twist" there that this is not necessarily bad. I'm fine letting people dream. I'm fine with people having general complaints. I have to be fine with people being wrong, as it happens whether I'm fine with it or not. What is getting dodgy is how many people accidentally find themselves hijacked in the delay that is inherent in understanding systems to think that they can win with a culture war. I think you're underestimating the skill required to do it that well. Add 1 wrong feature and suddenly your simple project working around a DX tarpits is a new tarpit. A lot of devs like building features. To be fair, almost zero people praise the dx for ffmpeg. but the utility and value is so massively high, that it overcomes the famously complex dx of ffmpeg. I'm not even insulting ffmpeg, if it does a million things, then there are going to be a million knobs. I think of git as the same. The git cli is not intuitive at all (unless that lightbulb goes off) but the utility is so good, that people just kind of suck it up and use it. > "DX tarpits" Google shows no results for this term so i'm guessing its your own short hand for something hard? Potentially a play on https://en.wikipedia.org/wiki/Turing_tarpit (DX is developer experience, tarpit is used idiomatically to mean “slow/difficult thing”) DX is developer experience (analogous to UX for user experience). Tarpit is often used as an analogy for anything that suddenly slows you down. >"DX tarpits" This is my approach which I use for SMBs (my actual clients). Never failed in decades. I am on my own since year 2000 and few times before that. 1) Always start with building single vertically scalable monolith running on dedicated server which can serve reasonable amount of transactions / date volume with acceptable performance. 2) Only start adding to infra when vertical scaling stops working (well you get some warning sign before it actually starting to hurt business) and then do it strictly on on need basis. Only rewrite / rearchitect if you see approaching google scale and can not shard simply by XXX-Canada, XXX-US etc. This will of course fail on some specialized scenarios but we are talking plain vanilla business backends for SMB. That's still make the hard part present. Things are not good on so many considerations. So selecting and being able to focus for just as much time as it will be required are the hard part. Thus starting with learning wow meditation seems an important first step. For all the rest, it's already going to be more issues on how to prioritize getting the ressources mapped where seems to fit to reach the goals. These are your 10x programmers. Maybe 100x or more in Bertrand’s case. It’s not about putting in 19 hour days or spitting out more lines of code or PRs or whatever. It’s coming up with elegant solutions with broad impact that no one else even considered. > Deciding what to work on might be the most important question in life. The flip side of this, is if you have the ability, you can just pick the hardest problem in your field, go solve it... rinse and repeat. Everyone can find out what the hardest problems in their field are, it's not a secret, just a question of if you have the ability/gumption/willingness to go spend years of your life attacking a problem like that Often this is the conundrum in research as well. What should one spend their life working on? Especially if you want to make an impact. Choosing the right problem is often harder than coming up with a relevant solution. One way I like to think of it is that Fabrice creates prototypes interesting enough that other people choose to spend their entire careers maintaining them. This is the more striking thing. An meme I often repeat is that ideas are cheap, execution is key - there's a trope of "I have a great idea for an app, I just need a developer to do all the work", exacerbated with AI doing all the work. But this guy is the opposite idea of that. In hindsight, sure, a library doing video is obvious. But the other ones? That's something else. > Deciding what to work on might be the most important question in life. Work on being a positive influence in the world. Help your neighbour when they are in need and fight for the rights of those less fortunate than yourself. >"Work on being a positive influence in the world." Different groups have different "positives" / negatives. So unless trivial like don't eat babies who's the judge? > who's the judge? You are. Decide for yourself what it means to be a positive influence in the world and do that. This isn’t that hard, it’s not a gotcha. If you are capable of empathy, you are capable of understanding what it means to be good for others, learn from mistakes, and do better. Also, I provided examples: > Help your neighbour when they are in need and fight for the rights of those less fortunate than yourself. Seems unambiguous to me. It's interesting to me that most of Bellard's work is basically turning specs into C. His most important projects are ffmpeg (codec specs), qEmu (ISA specs), QuickJS (the EcmaScript spec), tinyC (the C spec), and his telecom company (LTE specs). I guess the pi calculations and neural network stuff are exceptions. Just to be clear, this doesn't make his work any less impressive. Highly performant codec and emulator implementations are no easy feat; it's just interesting that most of this work falls into that relatively narrow area. It's worth noting that most communications specifications that involve an encoder/decoder pair communicating over a channel only specify the encoder. Standards purposely leave the decoder open to allow systems to progress as technology develops and to allow competition between implementations. This also makes a standard simpler, as a decoder is usually more complex than an encoder since it has to deal with noise and other effects introduced by the channel. Consequently, implementing a competitive standards compliant decoder involves R&D and is not a case of following a predefined path. I've always seen Bellard as an engineer who programs rather than a pure programmer. It is exactly the opposite for MPEG, which only specifies the decoder (i.e. how frames should be decoded). Maybe they meant encoding, the file format. But that only specifies the decoder. The format for all modern video codecs is not the kind of format where any specific piece of uncompressed input should always be encoded the same way, but more like a very restricted programming language that gives the encoder a lot of tools to compress the video, and which tools they use and how they use them are up to them. > ffmpeg (codec specs) if your mental model is that somebody writes codec specs and then fabrice bellard comes in and turns the specs into C, you are dead wrong. first of all, codecs are usually reverse-engineered, there is no spec. second of all, even when a well specified document describes the codec, that spec does not describe how to efficiently encode or decode with that codec. people like fabrice bellard develop the algorithms that do that. Vocabulary please.
A "codec" is software that CODes and DECodes multimedia content, while specs describe an encoded file or stream format (occasionally involving network protocols and other concerns). In a normal standard development process experimental codecs come first, then those that have proved to work well, including having good enough performance, are described in the spec; after standardization there's very little room to "develop the algorithms" because nonconformant implementations would be useless. Reverse engineering is limited to the abnormal case of having access to some codec but not to the standard that describes it. The way to criticize that comment is to point out that all the major and most important codecs that are most commonly used with ffmpeg, do not come from the ffmpeg project. H.264, H.265, libmp3lame, speex, libfdkaac, etc. all come from other projects. What ffmpeg does is provide libraries for transforming decoded data between formats and calling to and from encoders and decoders and multiplexers and bitstream formats. It may also be worth pointing out, in terms of apportioning credit fairly, that ffmpeg has not been Bellard's project since 2004. The thing we see today is no more his project than GCC or Emacs are Stallman's projects. There was a time when we would spend an enormous amount of time defining a spec, so that we can farm out the code. Now, we farm out the spec so that we can spend an enormous amount of time with the code. That's actually how I was trained. The spec and the implementation (and the testing) were separate areas; sometimes, done by different people. These days, I tend to mix them all together, and I think I get good results. I strongly suspect that a lot of folks, these days, only do the middle one. > I strongly suspect that a lot of folks, these days, only do the middle one. Ain't no one willing to pay for all of that. The clear separation is something you only see remaining in academia and industries where code quality issues have legal consequences (i.e. aerospace, marine, automotive and medical), and even there, pressure is high to relax rules viewed as "arcane". Writing good specifications, documentations, implementation code and tests each is an art form in itself If you actually work with ffmpeg, it's rather quite impressive how pluggable the architecture is. The codecs have huge amount of quirks and disagreements about basics (what is a "frame" in audio, subtitle, and video worlds?) and even their environment (passing frames around software and hardware coders is way different). That fact that you can (almost) freely mix and match processing between such different worlds is quite an achievement and libav (IMO) is decently well designed to allow that. Interesting observation, similar manner of work as Linus Torvalds. These guys implement existing ideas well, consistent and open, but are not inventors. I don’t think the distinction is actually that interesting as you could call any piece of software a spec I have wondered if I sequentially ask people who is the smartest living person they know, and ask that person next, would it lead me toward the same small group of geniuses. If I were doing that with the best living coder I might well start with Carmack. So next I'd have to go to Bellard, and hope that his answer isn't Carmack. Bellard hasn't been involved in FFmpeg for *over 20 years* at this point, and more like 23.
His code was not great and reeked of sphagetti due to FFmpeg back then lacking any framework for code sharing between components and codecs. These days none of his code survives. Everything that became of FFmpeg is because of other developers.
Yet he's treated as the one-and-only BDFL of FFmpeg, with any other developers building upon his wise framework since time immemorial.
These days all he does is hold the copyright, which lets him, *and only him*, elect which project/leader may call itself FFmpeg. He's an unelected dictator, who already used his powers once to ostracize libav developers in favor of another dictator. We mustn’t forget the context: FFmpeg and Videolan got their start in dorm rooms, where students used them to stream TV in the dorm and share movies. The Polytechnique and École Centrale campuses are just a few kilometers apart, and both projects began around 1997–1998. I don’t know about you, but as a student, I was too busy drinking beer to write clean code. > These days all he does is hold the copyright You mean trademark. The copyright is held by the authors of the code (or their employer, etc.), since there is no copyright assignment requirement. This is similar to how Linus Torvalds owns the "Linux" trademark (in some jurisdictions), but the copyright mostly belongs to other contributors. I just found this comment from 15y ago on the ffmpeg/libav drama: https://www.reddit.com/r/linux/comments/vvdxn/comment/c57zdk... I don't know ffmpeg but this resonates with my experience with other open source projects. Sounds about right. Don't know about the internal politics around the original maintainer but the libav folks never seemed right to me. I was glad at the time that the distro I was using left the choice up to the user. As far as the accusations against both rejecting patches and/or rewriting the code themselves goes I can empathize. It's not always easy to take on maintenance of code that isn't written like you want it to, even if the difference is ultimately immaterial. Sucks when this happens to a fundamental project that is used everywhere though. A good maintainer does need to have some ego but not too much it seems. Thanks, that maybe one side of the coin but it's very one-sided. The man is busy innovating and maybe has no time to carry on as he focuses on other projects. But he was there from the start and made it happen. Most of the code in the linux kernel today is not from Linus. 1. I don't believe anyone in their right mind thinks that ffmpeg is still maintained and developed by a single person, and definitely not by Fabrice
2. Spaghetti code or not matters very little, especially in the beginning, before you even know or understand the scope of the project and what it can become in the future. You can indeed refactor code when you understand the requirements better, and it's great that it's what the community did. I still think it was the right call to start with the spaghetti mess to not be dragged down by potential future problems that might never materialise because your project became something very different from what you originally had in mind > 2. Spaghetti code or not matters very little, especially in the beginning, before you even know or understand the scope of the project and what it can become in the future. Demonstrably false. Here and on Reddit, everyone will dogpile on a project to call it slop and flag it if they see code smells they don't like. Unless it was written by someone they already know and like from twitter devgooning, in which case it's amazing and everyone should use it. it's possible that "popular on HN and Reddit" is not a universal goal for writing code... It isn't, but if you're sharing something and you care about people seeing/using it, they're the most "democratic" places to do it. Twitter/YouTube can work well but they're rich get richer platforms. > He's an unelected dictator He has no real power. You can fork the project and organize an election. You could be right. I don't really know much about FFMpeg. But going from 0 to 1 and going from 1 to 100 are different. Usually, people remember the 0 to 1 step more. Symbolic capital tends to go to the first mover. It might feel unfair, but we always remember the first challenger. It might be spaghetti code, there might be countless contributions later, but that's usually how it goes What you describe is obvious corporate management path. You start with MVP, it gets traction, bosses like you and then others will code for the original author dismantling and rewriting original MVP. And don’t be shy - if one can pull this off he’s worth the credits. There are many who can code and not much who can manage. > due to FFmpeg back then lacking any framework for code sharing between components and codecs Funny, I remember this being completely different; FFmpeg bundled ffserver, which transcoded to a bunch of codecs at the same time (sharing motion search and everything) precisely to demonstrate how similar the codecs were and how much could be shared. (Of course, that could easily be spaghetti, but not spaghetti for non-code-sharing reasons.) All on the 400MHz-class machines we had at the time. Do I remember wrong? I haven't looked at these old releases in forever. Interesting counterpoint. I think this is the Peter principle in software: a lot of people are great at prototyping, but not great at the next stages of the project. Other people step in for those, but their existence is mostly ignored, since they can't easily fit inside a narrative. One think to note though is unelected dictators do have their benefits, even if they come with obvious downsides. Also it's worth mentioning that gstreamer is far more superior than ffmpeg, with its bindings, plugin architecture, control over stream (valves, tees, etc) and overall quality of code. The psyop about "only shipping clean code" has been a big drag on projects On the real world, if it runs and solves their problem nobody gives a fucc. Period Props on him. Watch how developers breathlessly defend code quality and stand tall ready to die on the hill against "AI slop". Craftsmanship, quality control, oh, it's all so, so important. No, it's absolutely vital to civilization. Then witness the amazing reversal when some member of The Tribe pushes unbelievably unreadable slop that works. Then we see his Ring getting kissed by all the betas: "if it work, it works". Pick a side. Quality is important or not? To call out The Tribe as hypocritical, you first need The Tribe to have a consensus opinion. Agentic coding in particular has been very polarizing both on HN and in the developer community at large - there is no consensus opinion. Before AI Slop most code quality that ran in production was shit, that's the GP's point.
Anyone who thinks otherwise simply did not have to come in contact with a wide variety of code in their job. Yet these same developers, these slop machines, are willing to die for "craftsmanship" and "code quality" when they are threatened by statistics. I don't see how you addressed my point. This is a case of tribalism, absolutely zero rationality and people will do mental gymnastics or get nasty if you try to force it. These people have decided that they HATE AI, and LOVE gooning on famous programmers, and public stances they take will support that, logic or consistency be damned. Bellard has a very interesting project that is `ts_zip`, a compression algorithm powered by LLMs. It's just an "experiment" and should never be used in production, but very smart. The description on his website is amusing: "The ts_zip utility can compress (and hopefully decompress) text files using a Large Language Model" > (and hopefully decompress) If the decompression is optional, I've got a really impressive compression algorithm in mind! There is a field of competitive compression algorithms, where time and computation are not factors. People have made compressors that take hours (days?) to compress the test corpus. A long-running kinda-joke in the field is that the upper-bound of compression is "AI-complete", where instead of compressing, say, the text data of the complete works of Shakespeare, the compressor just encodes "The Complete Works of Shakespeare", and the AI decompressor re-generates the output from that prompt. With the advent of LLMs, Bellard just made that joke a reality. But that's exactly what LLMs are. :) My mental model and go to ELI5 is "imagine you compressed the whole internet into a zip-like archive and you have an extremely clever and efficient way to search it for data". I'm old enough to remember the time when you could order wikipedia on CDs and I don't see much difference between that and downloading LLM. For those unaware, you can find Fabrice's website here: https://bellard.org/ It has a full list of his projects. Great programmers often also have great personal website design, everything is so clear and not one bit of redundance. It's really not a great design. It's just nerdy in a HN way. A great website would list projects in approximate order of importance/notability, would use the tiniest bit of CSS to make the text readable on wide screens, and would have images for projects with a visual component. The only reason his site is appealing is because you already know who he is. I am on a 27" 4k screen and that website is very readable to me. Should the text all be in a single column in the center taking 10% of the screen like 99% of blogs now? Chronological or Alphabetical sorting would make more sense than importance. I agree it's not the most pleasant site to visit. I understand peoples desire to move the web back towards simplicity/html only with no js. But a little bit of css does not hurt and would make simple sites like this a lot more enjoyable to look at. Just my opinion.. > A great website would list projects in approximate order of importance/notability Why? I imagine they're suggesting that so someone who lands on the page and is unaware of Bellard can immediately know what he is (famously) known for instead of having to scroll through the long list of projects. The website of Daniel J. Bernstein is similar: https://cr.yp.to/djb.html > Great programmers often also have great personal website design, everything is so clear and not one bit of redundance. It's literally just a list of <p> tags. This is ridiculous. It's running a single sentence across the entire window. > not one bit of redundance What about the url on the first displayed line? Not saying it's bad - got me thinking about this self-reference that most modern websites do with the logo on the header. First time I see his picture, and it’s a bit like someone’s revealed the identity of Satoshi Nakamoto when it’s clear they are going out of their way to protect their privacy and stay out of the limelight. My impression is the guy had always better things to do than engage with the greater internet, like thinking real hard and solving difficult problems. Much respect to his work, but even more respect to his work ethic. When you have a strong vision, you need the ivory tower style of development rather than spending your days arguing and defending your choices with internet strangers. No he never hid his identity, if you looked him up, you found his picture. Satoshi shouldn't be compared, I don't hold bitcoins nor am I interested, but the name is a lore. It was stamped on the original document. Fabrice Bellard is a real person shipping code; not an internet anonymous identity. Parent knows. He makes an analogy, not an absolute equivalence. Right, but the analogy is very clearly about someone trying to hide / protect their identity, which doesn’t apply in this case. Perhaps it was trying to stretch it to “unknown figure”, saying this programmer is mysterious, even though it was not by choice but circumstance: fame has eluded him. (Not implying it’s desired). But on that reading, I would still say the metaphor fails: it’s not effective at conveying this meaning and reads more like an unnecessary Satoshi name drop. > unnecessary Satoshi name drop "Thou shalt not take the name of the Lord in vain". I apologise. [flagged] This thread is why he is not on Twitter Fascinating, I'm not there for other reasons. So, about that costly Tea... And I'm here wondering if there's a limit to HN's nested replies. I'll continue to do my part as time allows, also curious. Anyway, if enough flag the top [like I did], it'll collapse.
andai - 5 hours ago
stouset - 3 hours ago
andai - 5 hours ago
abustamam - 4 hours ago
taeric - 3 hours ago
gopher_space - an hour ago
taeric - an hour ago
athrowaway3z - 4 hours ago
atonse - 2 hours ago
chollida1 - 3 hours ago
blanched - 3 hours ago
quietbritishjim - 3 hours ago
FpUser - an hour ago
psychoslave - an hour ago
jimbokun - 2 hours ago
swiftcoder - 2 hours ago
MinimalAction - an hour ago
apitman - 2 hours ago
Cthulhu_ - 5 hours ago
latexr - an hour ago
FpUser - an hour ago
latexr - an hour ago
miki123211 - 7 hours ago
femto - 6 hours ago
harrouet - 4 hours ago
kroeckx - 3 hours ago
Tuna-Fish - an hour ago
baobabKoodaa - 6 hours ago
HelloNurse - 3 hours ago
wang_li - an hour ago
reactordev - 7 hours ago
ChrisMarshallNY - 6 hours ago
mschuster91 - an hour ago
izacus - 7 hours ago
wswin - 6 hours ago
ex-aws-dude - 2 hours ago
delichon - 3 hours ago
pandaforce - 11 hours ago
Beretta_Vexee - 10 hours ago
mkl - 10 hours ago
alecco - 10 hours ago
account42 - 10 hours ago
keyle - 10 hours ago
nasretdinov - 9 hours ago
CuriouslyC - 4 hours ago
bigfishrunning - 2 hours ago
CuriouslyC - 29 minutes ago
gus_massa - 5 hours ago
jdw64 - 10 hours ago
lnsru - 10 hours ago
Sesse__ - 3 hours ago
mihaic - 7 hours ago
stackedinserter - 3 hours ago
raverbashing - 10 hours ago
fdsfsdsd - 6 hours ago
Calavar - 4 hours ago
youarecringe - 6 hours ago
fdsfsdsd - 6 hours ago
CuriouslyC - 3 hours ago
santiagobasulto - 5 hours ago
hbn - 4 hours ago
AceJohnny2 - 3 hours ago
zeroq - 5 hours ago
throwaway2037 - 10 hours ago
slmjkdbtl - 8 hours ago
rafram - 3 hours ago
ecshafer - 12 minutes ago
ryan_n - 2 hours ago
justin66 - 3 hours ago
allenu - an hour ago
throwaway2037 - 6 hours ago
Capricorn2481 - 43 minutes ago
gverrilla - 5 hours ago
sph - 12 hours ago
keyle - 10 hours ago
coldtea - 10 hours ago
f17428d27584 - 3 hours ago
sph - 2 hours ago
bravetraveler - 10 hours ago
alfiedotwtf - 9 hours ago
bravetraveler - 9 hours ago
herodoturtle - 8 hours ago
bravetraveler - 8 hours ago