The current JPEG XL decoder in #Firefox apparently consists more than 100,000 lines of multi-threaded C++
For just decoding an image format.
Not sure what it says about the format, the implementation and the Internet at large.
@bagder@mastodon.social To put in perspective:
- JPEG: libjpeg 6b encoder+decoder: 24,200 lines of C
- JPEG: libjpeg-turbo encoder+decoder: 127,000 of C and ASM (multi architectures)
- JPEG2000: openjpeg encoder+decoder: 50,000 lines of .C
- JPEG2000: Kakadu commercial encoder+decoder: 214,000 lines of C++ (only coresys component)
- libjxl: 150,000 lines for the core library, encoder+decoder (deps excluded)
(All above includes blank lines + inline doc)
So this is pretty much standard for a modern codec
@bagder@mastodon.social That sounds like an atrocity. But if it shows ads faster…uhm…nevermind.😌
@bagder@mastodon.social or about C++ and the state of coding and programming language tooling…
@bagder (i will keep banging the drums that most of the FOSS “supply chain” fear could be handled by investing more in programming language tooling, as Rust demonstrate, and that it would be a small overall cost for massive pay off…)
@Di4na possibly: I believe Rust is generally a good thing for most things, but I believe the Rust ecosystem with cargo and bazillions of always-updatiing tiny dependencies risk adding friction and at least complicates the equation quite a lot
@bagder@mastodon.social @Di4na@hachyderm.io
I’m not sure it is a tooling issue. I find cargo to be a great tool, and it have a lock file to let you update deps in a controlled fashion.
I think this comes down to a cultural issue, where the rust community, much like the JS community, put every little utility function in it’s own library. Hence, you tend to get a gazillion small dependencies that is hard to keep track of.@bagder@mastodon.social This is my biggest worry too: they essentially copied the NPM package management model and practices. Good for short term productivity, but I worry that it causes significant long-term maintainability problems.
And everything is version 0.x, in part due to technical limitations of Cargo: moving out of 0.x is a breaking change, so if you have users on 0.x (which Cargo encourages by treating 0.x specially) moving out of 0.x breaks them.
@bagder@mastodon.social i mean yes, but at least the compiler is a tool.
While C and others are uh. Well some are finally realising they have users
@bagder We had 100kloc C++ in a smart radiator valve that saved a bunch of extra energy.
I think it is just a reflection that extracting efficiency requires complexity.
@bagder@mastodon.social I can rewrite the JPEG-XL decoder it in a three day weekend 😅.
@bagder I think it is a bit misleading (and arguably unfair) to attribute this to Firefox specifically: this is the reference jpeg-xl implementation, originally created and maintained by Google, and in widespread experimental use across all kinds of browsers, including Chromium, Safari, Edge and more
@bagder@mastodon.social It’s a good hot take, but what amazes me most is the replies so far immediately jumping to conclusions with biased gut reactions as if their identity is tied to one or the other camp.
@bagder@mastodon.social IT complexity is ever increasing snd our dependence on it too…
@bagder@mastodon.social Wait, so JPEG XL isn’t completely dead? That’s probably not what you meant to communicate but I’m so happy to hear that
fwiw I think that LOC of the reference implementation doesn’t really say anything about anything - even if Firefox “adopted” it, which feels like a sensible choice given the state of things
@bagder@mastodon.social that’s why it’s called XL! 😂
@bagder@mastodon.social
I really don’t envy the people who’d have to rewrite that monstrosity.
See https://flak.tedunangst.com/post/on-building-jpeg-xl-for-wasm by @tedu@honk.tedunangst.com for the current state of the art method of decoding jpegxl safely, which is both hilarious and sad.@bagder@mastodon.social
And, just wondering:
How many of those lines are for handling security issues such as boobytrapped JPEGs?
How many lines do the other HTML rendering engine use for the same function?
The graphical web has many sins to make amends for!@bagder@mastodon.social could isolate the decoder in a WASM runtime and only starting the rewrite if and when the format becomes popular enough :-)
@bagder@mastodon.social 100K? That’s absurd
@bagder@mastodon.social It’s what I wondered when I saw https://jxl-art.surma.technology/ and https://jpegxl.info/art/