What sort of server it takes to build Firefox in four and a bit minutes

I tweeted :

Our new compute server builds Firefox Nightly from source in 4 minutes22 seconds, as well it should given how beefy it is. The build processdoes manage to get the machine to 100% usage of all CPUs, which isimpressive (and nice) since there are 112 of them.

Then in response to a question about the link phase's duration andparallelism :

The usage of all CPUs lasts about two minutes, with a ramp up at thestart and down at


Dynamic web pages can be viewed as a form of compression (sometimes)

If you're in a situation where static files are an alternative todynamically generating web pages, one of the ways to view dynamic webpages is through the lens of compression, where actually generating anyparticular dynamic web page is 'decompressing' it from the raw data (andcode) involved. This can provide a useful perspective for thinkingabout when dynamic web pages are attractive and when they're not.

(Not all uses of dynamic web pages are possible as static files; theremay not be a finite


A pragmatic driver of support for serving static files on the web is efficiency

Here is a question that you could ask in a certain sort of mood: whyis serving static files from a web server so well supported? It'snot universal (there are some web server environments with nosupport for it), partly because it's not as simple as it looks and you also need something approximating afilesystem, but it's very common and has been for a long time.

I think that one of the reasons is that lots of people wind up witha certain amount of


Understanding a thing with ZFS on Linux, kernel versions, RPMs, and DKMS

I use ZFS on Linux on my office andhome Fedora desktops. It's installed with RPM packages using the'zfs-dkms' option, where the ZoL RPMs install a DKMS module that DKMS then builds for whatever kernels. The advantage of the DKMS approachis that I don't need to somehow pre-build new kernel module RPMsbefore I upgrade my kernel; instead DKMS rebuilds things automatically.Recently I went to install a Fedora kernel upgrade to 5.16.11 andas part of


A Python program can be outside of a virtual environment it uses

A while ago I wrote about installing modules to a custom location , and in that entry one reason I said for notdoing this with a virtual environment was that I didn'twant to put the program involved into a virtual environment justto use some Python modules. Recently I realized that you don't haveto, because of how virtual environments add themselves to sys.path . As long as you run your program using thevirtual environment's Python, it gets to use all the modules youinstalled in


The problem of keeping track of hardlinks as you traverse a directory tree

One of the reactions to my discovery about rsync not handlinghardlinks by default was surprisethat memory was an issue of concern when doing this. After all, youmight ask, how hard is the problem and how much memory are we talkingabout? That depends on what sort of program you are and how thorougha job you want to do.

A program like du has the simplest case. GNU du's normal behavioris to ignore hardlinks after the first time it sees them , so all it needs to do


Firefox (Nightly) and the case of the fading scrollbars on Unix

For reasons beyond the scope of this entry ,I run a self-compiled Firefox that's built from the latest Firefoxdevelopment sources (as of when I build or rebuild it). Recently,I've noticed that my scrollbars have been flickering. At first Ididn't clearly see what was going on; later, I realized that the'flickering' was that the scroll bar would disappear after a whileif I didn't move the mouse, then reappear the moment I nudged iteven slightly


Python's os.environ is surprisingly liberal in some ways

The way you access and modify Unix environment variables in Pythonprograms is generally through os.environ ; Python 3being Python 3, sometimes you need os.environb . In Unix, what can go in the environment is somewhat fuzzy and while Python has someissues with character encodings, it's otherwise surprisingly liberalin a number of ways.

The first way that os.environ is liberal is that it allows environmentvariables to have blank values:

>>> os.environ["FRED"] = ""

Unix environment variables (and the environment) are a fuzzy thing

Unix environment variables generally look like a straightforward thinginitially, but I have recently been reminded that they are actuallysomewhat more fuzzy and under-defined in practice than you might think.

Generally speaking, the kernel API's onlyrequirement is that the environment be an array of null-terminatedstrings, generally of a limited total size .Further interpretation of the contents of these strings is left upto user level programs. Almost everything interprets these stringsas the names and values of 'environment variables', with the name


The varying sizes of images on the web today, and remembering that

Once upon a time on the web, people used relatively small imagesizes because it was rude to do otherwise ,especially when they were being used for things like icons. Ifsomewhere had visually small icons, they almost always were smallin actual image dimensions, and all the same size because the websitemade you do it that way. Over time that has shifted. People startedusing larger and larger images, even for things that were destinedfor little icons, and websites started accepting these images byclamping the image size