# Bcachefs

Bcachefs è un file system COW (copy-on-write) per sistemi operativi basati sul kernel Linux. Lo sviluppatore principale del progetto, Kent Overstreet, ne annunciò la nascita nel 2015 e venne aggiunto al kernel Linux a partire dalla versione 6.7.
È concepito per competere con le funzionalità moderne offerte da ZFS o Btrfs e con la velocità e le prestazioni messe a disposizione da ext4 o XFS.

## Caratteristiche

Bcachefs è un file system COW che offre caratteristiche interessanti quali: capacità di gestire in modo trasparente il caching dei dati, la possibilità di memorizzare informazioni in forma crittografata, utilizzando algoritmi come ChaCha20 e Poly1305, gestire nativamente la compressione tramite LZ4, gzip e Zstandard, snapshot, CRC-32C e checksum a 64 bit.
È estremamente versatile e può estendersi su più dispositivi a blocchi, anche nelle configurazioni RAID.
Le prime versioni di Bcachefs mettevano a disposizione tutte le funzionalità di Bcache, un sistema di cache a blocchi per Linux, con cui Bcachefs condivide circa l'80% del suo codice. A partire da dicembre 2021, la funzionalità di cache a livello di blocco è stata rimossa.
A livello di struttura dati, bcachefs utilizza B-tree come molti altri file system moderni, ma con una dimensione del nodo insolitamente grande, impostata di default a 256 KiB. Questi nodi sono strutturati internamente in log, formando una struttura dati ibrida e riducendo la necessità di riscrivere i nodi durante l'aggiornamento. Gli snapshot non vengono implementati clonando un albero COW, ma aggiungendo un numero di versione agli oggetti del file system. La funzionalità COW e l'allocazione dei bucket consentono un'implementazione RAID che non soffrono di "write hole" (buchi di scrittura) o di frammentazione I/O.

### Stabilità

Bcachefs viene descritto dagli stessi sviluppatori come un file system "funzionante e stabile, con una piccola comunità di utenti" ("working and stable, with a small community of users").
Il 7 aprile 2024 però, Linus Torvalds, parlando di Linux 6.9-rc3, toccò anche l'argomento bcachefs e riferendosi alla sua stabilità dichiarò che "se pensavi che bcachefs fosse già stabile, I have a bridge to sell you (modo per dire inglese che indica che qualcuno ti sta proponendo una truffa o una balla)".
Tornato sull'argomento nell'agosto del 2024 Torvalds disse che "nessuno sano di mente utilizzerebbe bcachefs aspettandosi che sia stabile" ("nobody sane uses bcachefs and expects it to be stable).
Nell'agosto 2024, il responsabile Debian di bcachefs-tools, ha reso orfano il pacchetto, mettendo in dubbio la sua sostenibilità a lungo termine. Pubblicò anche un post nel blog che avvertiva: "Se si intendesse utilizzare bcachefs per qualsiasi tipo di utilizzo in produzione in futuro, consiglierei prima di capire quanto sia supportabile a lungo termine e se c'è davvero qualcuno che riesca a fornire un supporto stabile per esso".

## Storia

Lo sviluppatore principale è Kent Overstreet, lo stesso di Bcache, una tecnologia presente nel kernel Linux e che permette di creare dei volumi ibridi. A detta dello stesso Overstreet, Bcache è stato un "prototipo" che ha contribuito alla realizzazione di Bcachefs che ne è erede e sostituto.
L'idea di sviluppare il file system Bcachefs è nata dopo che gli sviluppatori di Bcache si sono resi conto che il codice "si stava evolvendo... in un file system POSIX completo e multiuso" ("been evolving... into a full blown, general-purpose POSIX filesystem") con un "design davvero pulito ed elegante" ("really clean and elegant design").
Dopo che Bcache venne integrato nel ramo di sviluppo principale del kernel Linux, nel 2013, Overstreet lasciò il suo lavoro presso Google per dedicarsi a tempo pieno su Bcachefs.
Nel 2015, dopo alcuni anni di sviluppo non finanziato, Overstreet annunciò Bcachefs nel 2015. La sua intenzione era quella di creare un file system avanzato con caratteristiche moderne come quelle di ZFS o Btrfs ma con la velocità e le prestazioni di file system come ext4 e XFS.
A partire dal 2017 Overstreet ha ricevuto supporto finanziario per lo sviluppo di Bcachefs tramite Patreon.
A metà del 2018 le patch per includere Bcachefs nel kernel Linux sono state inviate, ma non vennero accettate.
Nei primi mesi del 2019, le funzionalità richieste a Bcachefs sono state completate e le patch annunciate sulla KKML per essere sottoposte a revisione.
Nell'ottobre 2023 Bcachefs è stato integrato nel kernel Linux 6.7, rilasciato nel gennaio 2024.