
C’è qualcosa di profondamente catartico nell’osservare un vecchio nemico che finalmente viene estirpato dal proprio ecosistema. Non parlo di un boss di fine livello di un RPG che non riesci mai a battere, ma di una funzione C che è stata per anni una brutta bestia capace di scatenare bug a tradimento: la mitica strncpy.
Con l’arrivo del kernel Linux 7.2, la strncpy è ufficialmente andata in pensione. E non parlo di quel pensionamento dignitoso con festa e torta, ma di una rimozione chirurgica dopo un lavoro titanico durato sei anni e che ha richiesto ben 362 commit. Se pensate che sia solo una formalità da manuale, vi sbagliate di grosso: è stata una pulizia profonda, un setaccio che ha rimosso ogni traccia rimasta di questa API nelle implementazioni per ogni singola architettura CPU.
Per chi non ha passato le notti insonni a debuggare buffer overflow, lasciate che vi spieghi perché strncpy era il tipo di collega che nessuno vuole in team. Questa funzione ha una semantica così controintuitiva che fa sembrare i regolamenti della privacy europei una lettura leggera per bambini. Il problema principale? La gestione del terminatore NUL. Strncpy può decidere di non aggiungerlo se non riesce a completare la copia, lasciandoti con una stringa che è una vera bomba a orologeria pronta a esplodere non appena qualcuno prova a leggerla.
In più, c’è il problema delle performance. strnccpy ha la cattiva abitudine di riempire inutilmente con zeri il resto della destinazione, sprecando cicli CPU che potrebbero essere usati per cose molto più interessanti, tipo far girare un container in più o compilare un kernel senza piangere. È quel tipo di inefficienza che ti fa venire voglia di lanciare il laptop dalla finestra.
Ora, la strada è spianata verso alternative molto più sane e trasparenti. Se devi copiare stringhe con terminatore, c’è strscpy. Se ti serve il padding, ci sono strscpy_pad o memcpy_and_pad. È un approccio molto più ‘explicit’ e meno ‘magia nera che sembra funzionare ma poi ti frega’.
Non è una notizia che cambierà la vita del sysadmin che gestisce un server in un datacenter in Lombardia, ma per noi che viviamo di codice e di tutto ciò che è open source, è un segnale di salute. Dimostra che il kernel Linux non è un museo polveroso dove si conserva tutto per paura di rompere qualcosa, ma un organismo vivo che ha il coraggio di fare manutenzione pesante per eliminare il debito tecnico. È l’approccio che vorremmo anche nella vita reale: se una cosa è strutturalmente sbagliata e genera solo problemi, non cercare di metterci un patch, eliminala e passa oltre.
Source: Linux eliminates the strncpy API after six years of work, 360 patches
