Den gangen `make clean` slettet "verden"
Alle utviklere har krigshistorier. Dette er en av mine — fra den gangen jeg ved et uhell slettet alle de delte objektfilene til prosjektet jeg jobbet med, med to ord: make clean.

Kontekst
Jeg jobbet som sommerstudent hos et forskningsinstitutt, og kodebasen hadde det byggesystemet alle kjenner igjen: det funket, ingen forsto det, og ingen rørte det. Biblioteker eksisterte ikke som .a- eller .so-filer slik de burde — de lå som løse .o-filer rett i /usr/local/lib. Ingen pakking, ingen struktur, bare «de har alltid ligget der».
De fast ansatte hadde aldri hatt behov for en clean-target i Makefilen. Ingen bygget fra scratch. Ingen tenkte over avhengigheter. Det bare funket.
Smellen
Så kom jeg og la til clean som et helt normalt make-target:
clean:
rm -f $(OBJS)
Problemet? $(OBJS) inkluderte ikke bare mine egne objektfiler — den refererte til alle objektfilene prosjektet linket mot, inkludert de løse .o-filene i /usr/local/lib som resten av prosjektet var avhengig av.
make clean. Enter. Borte.
Panikk (og heldig utgang)
Svetten begynte å renne. Filene var ikke mine, jeg visste ikke helt hvor de kom fra, og det var tvilsomt om noen andre visste det heller.
Heldigvis hadde jeg nok innsikt i byggesystemet til å kunne rekompilere også de delene jeg ikke selv jobbet med. Alt ble gjenopprettet, ingen permanent skade. Men det var noen svært ubehagelige minutter.
Bonushistorie: -O4 på HP-UX
Samme sted, annen dag. Jeg bestemte meg for å prøve -O4 på HP-UX-kompilatoren — full interprosedural optimering med aggressiv inlining. Maskinen gikk rett i bakken. Tom for minne, hard krasj. På datidens maskinvare var det rett og slett ikke nok RAM til den typen analyse.
Moralen
Det er forundringsverdig hvor lite organisasjoner passer på byggesystemene sine. Kode får oppmerksomhet — den har code review, testing, CI/CD. Men Makefilen? Den er alles ansvar, som betyr at den er ingens ansvar.
Noen lærdommer:
- Pakk biblioteker ordentlig. Løse
.o-filer i/usr/local/liber ikke en strategi — det er teknisk gjeld med renter. - En
clean-target skal bare slette det du bygget. Aldri la den røre filer utenfor ditt eget byggtre. - Forstå byggesystemet ditt. Hvis bare én person kan bygge fra scratch, har du et single point of failure med bein.
- Prøv
-O4på noen andres maskin. (Spøk. Kanskje.)