Кажуть, що комп'ютерне обладнання або програмне забезпечення сумісні за помилками, якщо воно точно повторює небажані особливості[1] попередньої версії. Фраза є в Jargon File.[2]
Аспект підтримки зворотної сумісності зі старішою системою полягає в тому, що клієнтські програми таких систем часто залежать не лише від їхніх визначених інтерфейсів, але й від помилок і незапланованої поведінки, які також мають бути збережені в новій версії. Окрім значно вищої складності, яку доводиться підтримувати під час природної еволюції коду чи інтерфейсу, це іноді спричиняє проблеми з продуктивністю чи безпекою, а неузгодженість у поведінці інтерфейсів може призводити до нових помилок у програмному забезпеченні, яке його використовує, створюючи складні для розв'язання перехресні залежності між різними фрагментами коду.[3]
Приклади
DOS
Приклади можна знайти в MS-DOS/PC DOS. Коли MS-DOS/PC DOS 3.1 і вище (включно з Windows 9x) і OS/2 виявляють певні мітки FAT OEM[en], вони не довіряють деяким значенням блоку параметрів BIOS[en] (BPB) і переобчислюють їх за іншими параметрами геометрії диска, щоб обійти кілька «помилок на одиницю», викликаних програмами для форматування в деяких попередніх версіях систем.[4][5][6][7] Хоча така недокументована поведінка дозволяє їм упоратися з цими неправильно відформатованими томами, вона обмежує гнучкість геометрії диска, з якою вони можуть працювати в цілому, і може призвести до того, що вони відкидають правильно відформатовані томи, створені третіми сторонами, якщо вони відхиляються від стандартних значень, використовуваних Microsoft і IBM.[6][7] Коли MS-DOS/PC DOS 5.0 і вище працюють на процесорах 286 або вище, резидентний завантажувач[en] містить код, спеціально розроблений для виявлення та виправлення певних поширених програм і завантажувачів-заглушок (таких як програми, пов'язані зі старішими версіями Microsoft EXEPACK[en] або розширювачів DOS[en] 386 від Rational Systems) шляхом виправлення завантаженого образу програми перед його виконанням. За певних умов базова DOS також виправляє Windows (WINA20.386).
Під час розробки DR-DOS[en] також довелося модифікувати, щоб не тільки імітувати низку недокументованих особливостей і небажаних властивостей MS-DOS і PC DOS (наприклад, використання деяких оманливих імен файлів, таких як IBMBIO.COM[en], IBMDOS.COM[en] або COUNTRY.SYS, для файлів, які не відповідають специфікаціям для виконуваних файлів у DOS,[8][9][10][nb 1] або необхідність внутрішнього впровадження Current Directory Structure (CDS) з обмеженою довжиною шляху до каталогу[11][12][13]), а також фактичні помилки в ядрі та кількох драйверах, щоб змусити працювати в DR-DOS деякі інші драйвери та програми, які тестувалися лише на певних версіях MS-DOS.[11][6][14][15][16][17]
Windows
Ще один приклад — Windows, яка традиційно емулювала багато старих системних помилок, щоб забезпечити роботу старіших низькорівневих програм. Як наслідок, Wine, який дає змогу запускати багато програм Windows на інших платформах, також має підтримувати сумісність за помилками з Windows.[18]
Гайрум Райт (Hyrum Wright), інженер Google, розповів про цю проблему, яку він спостерігав, працюючи над бібліотеками ядра C++. Ще один інженер Google, Титус Вінтерс (Titus Winters), популяризував цю концепцію як «закон Гайрума».[21]
Назва HTTP referer[en] містить помилку у слові referrer. Цю помилку, що з'явилася в оригінальній веб-пропозиції, збережено для сумісності.
↑Файли IBMBIO.COM і IBMDOS.COM це особливі двійкові образи, що містять виконуваний код. Випадкова спроба запустити їх так, ніби це звичайні COM-програми спричиняє падіння системи. З цієї причини в MS-DOS/PC DOS у цих файлів установлено атрибутприхований. Цього можна було б уникнути, вибравши інші розширення (як у DRBIOS.SYS і DRBDOS.SYS), але цього не можна було зробити пізніше, щоб зберегти сумісність із різними інструментами, які очікують саме цих назв файлів. Для усунення ризику збоїв ці файли замінено на fat binary[en] в DR-DOS 7.02 і вище, які тепер містять крихітні заглушки для коректного завершення роботи у разі неправильного виклику.(Paul, 1997, Caldera, 1998)
Примітки
↑bug-for-bug compatible. catb.org. Same as bug-compatible, with the additional implication that much tedious effort went into ensuring that each (known) bug was replicated.
↑Paul, Matthias R. (10 червня 2001) [1995]. DOS COUNTRY.SYS file format (COUNTRY.LST file) (вид. 1.44). Архів оригіналу за 20 квітня 2016. Процитовано 20 серпня 2016.
↑Paul, Matthias R. (30 липня 1997) [1994-05-01]. NWDOS-TIPs — Tips & Tricks rund um Novell DOS 7, mit Blick auf undokumentierte Details, Bugs und Workarounds. MPDOSTIP (нім.) (вид. 3). Архів оригіналу за 10 вересня 2017. Процитовано 6 серпня 2014. (NWDOSTIP.TXT це докладна праця про Novell DOS 7 і OpenDOS 7.01, яка включає опис багатьох недокументованих функцій та особливостей. Це частина більшої збірки MPDOSTIP.ZIP підтримуваної до 2001 року та поширеної на багатьох сайтах. Наведено посилання на старішу версію HTML-файлу NWDOSTIP.TXT.) [5]
↑ абPaul, Matthias R. (2 лютого 2002). Treiber dynamisch nachladen (Intra-Segment-Offset-Relokation zum Laden von TSRs in die HMA) [Loading drivers dynamically (Intra-segment offset relocation to load TSRs into the HMA)]. de.comp.os.msdos (German) . Архів оригіналу за 9 вересня 2017. Процитовано 2 липня 2017. (Містить всебічний огляд історії та "природи" HMA та дрібних обмежень, які слід враховувати при розробці резидентних розширень, які підлягають завантаженню в HMA.)