Kompatybilność błędów
Mówi się, że sprzęt komputerowy lub oprogramowanie jest kompatybilne z błędami , jeśli dokładnie powiela nawet niepożądaną funkcję poprzedniej wersji. Wyrażenie znajduje się w Jargon File .
Aspektem zachowania kompatybilności wstecznej ze starszym systemem jest to, że programy klienckie takich systemów często zależą nie tylko od ich określonych interfejsów, ale także od błędów i niezamierzonego zachowania. To musi być również zachowane przez nowszą wymianę. Oprócz znacznie większej złożoności, którą należy zachować podczas naturalnej ewolucji kodu lub interfejsu, może to czasami powodować problemy z wydajnością lub bezpieczeństwem, a niespójności w zachowaniu interfejsów mogą czasem prowadzić do nowych błędów w oprogramowaniu, które go używa, tworząc trudne do rozwiązania wielokierunkowe zależności krzyżowe między różnymi fragmentami kodu.
Przykłady
DOS
Przykłady można znaleźć w MS-DOS / PC DOS : Kiedy MS-DOS/PC DOS 3.1 i nowsze (w tym Windows 9x ) i OS/2 wykrywają pewne etykiety FAT OEM , nie ufają niektórym wartościom bloków parametrów systemu BIOS (BPB) i przeliczyć je na podstawie innych parametrów geometrii dysku, aby obejść kilka błędów obliczeniowych off-by-one spowodowanych przez niektóre z ich programów formatujących we wcześniejszych wersjach tych systemów. Chociaż to nieudokumentowane zachowanie pozwala im radzić sobie w szczególności z tymi niepoprawnie sformatowanymi woluminami, ogranicza elastyczność geometrii dysków, z którymi mogą pracować w ogóle, i może spowodować, że prawidłowo sformatowane woluminy utworzone przez strony trzecie odbiegają od domyślnych ustawień używanych przez Microsoft i IBM . Gdy MS-DOS/PC DOS 5.0 i nowsze działają na procesorach 286 lub wyższych, rezydentny program ładujący zawiera kod specjalnie zaprojektowany do wykrywania i naprawiania niektórych szeroko rozpowszechnionych aplikacji i programów ładujących (takich jak programy powiązane ze starszymi wersjami Microsoft EXEPACK lub Rational Systems ' 386 DOS extender) poprzez łatanie załadowanego obrazu programu przed jego wykonaniem. W pewnych warunkach bazowy DOS łata również system Windows (WINA20.386).
W trakcie rozwoju DR-DOS musiał zostać również zmodyfikowany, aby nie tylko emulować wiele nieudokumentowanych osobliwości i niepożądanych właściwości MS-DOS i PC DOS (takich jak konieczność używania pewnych wprowadzających w błąd nazw plików, takich jak IBMBIO.COM , IBMDOS.COM lub COUNTRY .SYS dla plików, które nie są zgodne ze specyfikacjami dla plików wykonywalnych w DOS lub konieczności wewnętrznego wprowadzenia ograniczonej długości ścieżki do katalogu Current Directory Structure (CDS), ale także rzeczywistych błędów w jądrze i kilku sterownikach, aby upewnić się, że inne sterowniki i aplikacje działają w systemie DR-DOS, podczas gdy były testowane tylko w określonych wersjach systemu MS-DOS.
Okna
Windows , który tradycyjnie emulował wiele starych błędów systemowych, aby umożliwić uruchamianie starszych programów niskiego poziomu, to kolejny przykład. W rezultacie Wine , które umożliwia uruchamianie wielu aplikacji Windows na innych platformach, musi również zachować zgodność błędów z Windows.
Kiedy firma Microsoft wycofała obsługę 16-bitowego kodu w systemie Windows, nie uwzględniając już NTVDM w 64-bitowych wersjach systemu operacyjnego, program ładujący plik wykonywalny został zmodyfikowany w celu rozpoznawania niektórych określonych 16-bitowych programów uruchamiających i instalatorów oraz zastępowania ich w latać z równoważnymi kodami pośredniczącymi, które działają na procesorach 64-bitowych.
Inny
Podczas prac nad kompatybilnością z IBM PC , inżynierowie firmy Compaq stwierdzili, że Microsoft Flight Simulator nie będzie działać z powodu czegoś, co Bruce Artwick z subLOGIC opisał jako „błąd w jednym z układów Intela ”, zmuszając ich do dostosowania komputera do błędów komputer IBM. Inny przykład sprzętu można znaleźć w projekcie linii adresowej IBM Personal Computer / AT A20 w celu naśladowania zachowania starszych procesorów.
Microsoft Excel zawsze miał celowy błąd roku przestępnego , który fałszywie traktuje 29 lutego 1900 jako rzeczywistą datę, aby zapewnić kompatybilność wsteczną z Lotus 1-2-3 .
Hyrum Wright, inżynier w Google , opowiada o problemie, który zaobserwował podczas pracy nad podstawowymi bibliotekami C++. To Titus Winters, również inżynier w Google, spopularyzował tę koncepcję na większą skalę jako „ Prawo Hyruma ”.