Kiedy pierwszy raz zobaczysz w menedżerze partycji napis MiB albo GiB, odruch jest naturalny: to literówka, ktoś się zamachnął przy klawiaturze. A jest dokładnie odwrotnie. To megabajt i gigabajt są jednostkami „na skróty", a mebibajt i gibibajt — te dziwne słowa z „i" w środku — są jedynymi, które mówią prawdę o tym, ile bajtów naprawdę mieści się w Twojej pamięci. Ta pozornie kosmetyczna różnica to owoc sześćdziesięciu lat inżynierskich kompromisów, marketingu i kilku prób reformy, które spektakularnie się nie przyjęły.
Jak „kilo" zaczęło znaczyć 1024
W latach 50. i 60. komputery nie były zgodne nawet co do tego, jak adresować pamięć. IBM 701 z 1952 roku był maszyną binarną i adresował 2048 słów po 36 bitów; zaprezentowany rok później IBM 702 był dziesiętny i operował na 10 000 znaków siedmiobitowych. Rozmiary pamięci opisywano wtedy po prostu dokładną liczbą.
Przełom przyszedł w połowie lat 60., gdy adresowanie binarne stało się standardem, a pamięć operacyjna zaczęła rosnąć potęgami dwójki. Inżynierowie zauważyli wtedy matematyczny zbieg okoliczności, który zaważył na kolejnych dekadach: dziesiąta potęga dwójki, 2¹⁰ = 1024, leży bardzo blisko tysiąca (10³ = 1000). Ponieważ metryczny przedrostek „kilo-" oznaczał dokładnie tysiąc, zaczęto go — dla wygody — stosować do wartości 1024. Rozjazd wynosił marne 2,4%, a każdy inżynier i tak rozumiał binarny kontekst. Skrót przyjął się w dokumentacji kultowych maszyn epoki: IBM System/360, CDC 7600, DEC PDP-11.
Problem w tym, że przy każdym kolejnym rzędzie wielkości ten drobny błąd się mnoży. Już pod koniec lat 60., gdy pojawiły się dyski liczone w milionach bajtów, dostrzeżono zagrożenie. Posypały się propozycje ratunku:
- Donald Morrison (1968) chciał oznaczać 1024 grecką literą kappa (κ), a jej potęgi kolejnymi rzędami.
- Wallace Givens odpowiedział skrótem „bK" (od binary kilo), zwracając uwagę, że greckich liter i tak nie da się wydrukować na ówczesnych drukarkach.
- Bruce Alan Martin z Brookhaven National Laboratory poszedł najdalej: proponował porzucić metryczne przedrostki i pisać wykładniczo o podstawie 2, tak że 3B20 oznaczałoby 3 × 2²⁰.
Żadna z tych idei nie zdobyła poparcia przemysłu. Niejednoznaczność została z nami na kolejne trzy dekady.
Narodziny bibajtów: IEC kontra JEDEC
Chaos trzeba było w końcu uporządkować, ale najpierw został on... zalegalizowany. Stowarzyszenie JEDEC, które standaryzuje pamięci półprzewodnikowe, w normie JESD100B.01 oficjalnie zdefiniowało kilobajt, megabajt i gigabajt jako potęgi 1024. Odzwierciedlało to realną praktykę producentów RAM-u, ale wprost kłóciło się z układem SI, w którym „kilo", „mega" i „giga" to wyłącznie potęgi tysiąca.
Konflikt rozstrzygnęła Międzynarodowa Komisja Elektrotechniczna (IEC). W grudniu 1998 roku (publikacja: styczeń 1999) zatwierdziła nowe przedrostki binarne jako aneks do normy IEC 60027-2. Recepta na nazwy była prosta i sprytna: weź pierwsze dwie litery przedrostka SI i dodaj sylabę „bi" (od binary). Tak kilo + binary dało kibi, mega → mebi, giga → gibi. W 2009 roku przedrostki trafiły do międzynarodowej normy ISO/IEC 80000, odbierając ostatecznie prawo do binarnego użycia symboli SI. Poparły je Międzynarodowy Komitet Miar i Wag (CIPM) oraz IEEE.
Poniższa tabela pokazuje pełną drabinę binarną — dokładnie te przeliczniki, na których działa konwerter danych binarnych NebulaMath. Ostatnia kolumna to sedno całego zamieszania: o ile jednostka binarna jest większa od swojego dziesiętnego imiennika.
| Przedrostek IEC | Symbol | Wartość binarna (w bajtach) | Odpowiednik SI | O ile większy od SI |
|---|---|---|---|---|
| kibi | KiB | 2¹⁰ = 1 024 | kB (10³) | +2,40% |
| mebi | MiB | 2²⁰ = 1 048 576 | MB (10⁶) | +4,86% |
| gibi | GiB | 2³⁰ = 1 073 741 824 | GB (10⁹) | +7,37% |
| tebi | TiB | 2⁴⁰ = 1 099 511 627 776 | TB (10¹²) | +9,95% |
| pebi | PiB | 2⁵⁰ = 1 125 899 906 842 624 | PB (10¹⁵) | +12,59% |
Drabina nie kończy się na pebibajtach. Wyżej są exbi (Ei), zebi (Zi) i yobi (Yi), a gdy w listopadzie 2022 roku dodano do SI dziesiętne przedrostki ronna i quetta, norma IEC 80000-13:2025 dorobiła im binarne odpowiedniki: robi (Ri, 2⁹⁰) oraz quebi (Qi, 2¹⁰⁰). Im wyżej, tym boleśniej: na poziomie yobibajta różnica między binarnym a dziesiętnym liczeniem przekracza już 20%.
Gdzie „i" jest jedynym słusznym wyborem
Skoro przedrostki binarne są takie kłopotliwe, po co je w ogóle utrzymywać? Bo istnieje świat, w którym potęgi dwójki nie są wygodną aproksymacją, lecz twardą fizyką sprzętu — i tam megabajt w sensie dziesiętnym po prostu nie ma sensu.
Ten świat to pamięć operacyjna (RAM). Układy pamięci adresuje się liniami binarnymi, więc ich pojemność z natury jest potęgą dwójki. Kość opisana jako „8 GB" to w istocie 8 × 2³⁰ bajtów, czyli poprawnie 8 GiB — i tu, w odróżnieniu od dysków, żaden producent nie „zaokrągla w dół". Z tego samego powodu binarnych jednostek trzymają się narzędzia, które operują na fizycznych blokach pamięci: menedżery partycji (GParted), monitory zasobów czy programy dbające o wyrównanie sektorów do granic bloków. Tam MiB i GiB to nie pedanteria, tylko warunek poprawności — sektor wypadający w połowie bloku oznacza realny spadek wydajności.
Ta sama logika rządzi rozmiarami plików i alokacją bloków w systemach plików. Dlatego oficjalna polityka jednostek w Ubuntu i Debianie jest twarda: jeśli program dzieli przez 1024, musi pisać KiB/MiB/GiB; jeśli dzieli przez 1000 — kB/MB/GB. Zapis „1 kB = 1024 B" jest tam traktowany jak zwykły błąd.
Hybrydy i anomalie fizycznych nośników
Zanim IEC uporządkowała nazewnictwo, rynek zdążył wyprodukować oznaczenia, które nie są ani szczerze binarne, ani szczerze dziesiętne. Najsłynniejsza jest dyskietka 3,5" HD „1,44 MB" — i jej etykieta to prawdopodobnie najbardziej absurdalna jednostka w historii informatyki.
Nośnik ma fizycznie 2880 sektorów po 512 bajtów, czyli 2880 × 512 = 1 474 560 bajtów. Podzielone przez czysty megabajt dziesiętny (10⁶) daje 1,47 MB; podzielone przez czysty mebibajt (2²⁰) daje 1,41 MiB. Skąd więc „1,44"? Z działania, którego nie da się obronić metodologicznie: producent podzielił pojemność przez 1000 × 1024 = 1 024 000 — jeden „megabajt" zdefiniowany jako iloczyn tysiąca (dziesiętnego) i 1024 (binarnego). To megabajt-mutant, hybryda obu systemów naraz.
Podobne kwiatki znajdziemy na płytach. „700 MB" na płycie CD-R to w rzeczywistości około 703 MiB danych użytkownika (czyli ~737 MB dziesiętnie) — etykieta wyrażona w mebibajtach, ale podpisana symbolem „MB". Z kolei płyty DVD są opisywane uczciwie dziesiętnie, dlatego system operacyjny liczący binarnie zawsze pokaże na nich „niedomiar".
| Nośnik | Etykieta | Rzeczywiste bajty | Dziesiętnie (SI) | Binarnie (IEC) | Charakter oznaczenia |
|---|---|---|---|---|---|
| Dyskietka 3,5" HD | 1,44 MB | 1 474 560 | 1,47 MB | 1,41 MiB | hybryda: „mega" = 1000 × 1024 |
| Płyta CD-R | 700 MB | 737 280 000 | 737,28 MB | 703,13 MiB | mebibajty podpisane jako „MB" |
| DVD-5 (SL) | 4,7 GB | 4 700 000 000 | 4,70 GB | 4,38 GiB | szczery zapis dziesiętny (SI) |
| DVD-9 (DL) | 8,5 GB | 8 547 758 080 | 8,55 GB | 7,96 GiB | szczery zapis dziesiętny (SI) |
Sieć nie zna binarności
Jest jednak dziedzina, która nigdy nie dała się wciągnąć w ten spór: transmisja danych. Przepustowość łącza mierzy się wyłącznie dziesiętnie, w bitach na sekundę — 1 Mb/s to równo 1 000 000 bitów na sekundę, bez wyjątków. Powód jest podwójny. Po pierwsze, urządzenia sieciowe przesyłają surowe impulsy — pojedyncze bity — a abstrakcja ośmiobitowego bajtu nie ma dla samej linii żadnego znaczenia konstrukcyjnego. Po drugie, dostawcom po prostu wygodniej: „300 Mb/s" brzmi lepiej niż uczciwie przeliczony na bajty transfer.
I właśnie na styku tych dwóch światów rodzi się największa dezorientacja użytkownika. Weźmy łącze Gigabit Ethernet, czyli 1 000 000 000 bitów na sekundę. Zamieńmy je na binarne mebibajty, w których system pokazuje postęp pobierania (zakładając idealny brak narzutu):
- dzielimy przez 8 (bity → bajty): 125 000 000 B/s,
- dzielimy przez 1024 (bajty → KiB): 122 070,31 KiB/s,
- dzielimy przez 1024 (KiB → MiB): 119,21 MiB/s.
Dlatego menedżer pobierania na łączu „gigabitowym" nigdy nie pokaże okrągłych 125 MB/s, tylko jakieś dziwne 119 — i to jeszcze w najlepszym razie. W praktyce dochodzi narzut protokołów: każdy pakiet niesie nagłówki TCP/IP, a na warstwie fizycznej stosuje się kodowanie korekcyjne. Fast Ethernet używa np. schematu 4B5B, w którym każde 4 bity danych koduje się 5 bitami na łączu — stąd surowe 125 megabodów, by uzyskać użyteczne 100 Mb/s. Po odjęciu tych narzutów realny transfer rzadko przekracza 110–112 MiB/s. Użytkownik, który spodziewał się „125", widzi 112 i znów czuje się oszukany — choć nikt nic nie ukradł.
Dlaczego mebibajt wciąż jest sierotą
Standard ma ćwierć wieku, jest poprawny i logiczny — a mimo to niemal nikt go nie widuje. Główny powód jest jeden: Microsoft Windows, system setek milionów ludzi, konsekwentnie dzieli przez 1024, lecz podpisuje wynik dziesiętnym „GB". To utrwala złe nawyki na masową skalę. Do tego dochodzi ryzyko wizerunkowe: gdyby producent z dnia na dzień przeszedł na poprawną notację, pliki użytkowników „skurczyłyby się" o kilka procent w ujęciu liczbowym — i posypałyby się nieuzasadnione reklamacje.
Można się z tą niekonsekwencją godzić, dopóki mówimy o pendrivie. Ale wchodzimy w erę chmur liczonych w eksabajtach i zettabajtach, gdzie różnica między binarnym a dziesiętnym liczeniem przekracza 15–20%. Na tej skali „drobna nieścisłość" zamienia się w błąd nie do zaakceptowania w rachunkach za magazyn danych czy w alokacji pamięci. Dyscyplina jest więc prosta, choć wciąż rzadko przestrzegana: jednostki IEC (KiB, MiB, GiB) tam, gdzie adresuje się binarnie — pamięć RAM, bloki systemu plików — a przedrostki SI (kB, MB, GB) dla surowej pojemności nośników i prędkości sieci. Litera „i" nie jest literówką. Jest deklaracją, że tym razem policzono uczciwie.
Dalsza lektura
- IEC 80000-13, Quantities and units – Part 13: Information science and technology — oficjalna norma definiująca przedrostki binarne.
- NIST, Definitions of the SI units: The binary prefixes — zwięzłe stanowisko amerykańskiego instytutu metrologicznego.
- Wikipedia, Timeline of binary prefixes — historia prób reformy (kappa, „bK", notacja Martina) i standaryzacji.
- Ubuntu Wiki, UnitsPolicy — wzorcowa, twarda polityka rozdziału jednostek SI i IEC w systemie operacyjnym.
