Термин программирования
Компьютерное оборудование или программное обеспечение считается совместимым с ошибками , если оно точно повторяет нежелательную функцию [1] предыдущей версии. Фраза встречается в Jargon File . [2]
Аспектом поддержания обратной совместимости со старой системой является то, что клиентские программы таких систем часто зависят не только от своих указанных интерфейсов, но также от ошибок и непреднамеренного поведения. Это также должно быть сохранено более новой заменой. Помимо значительно более высокой сложности, которую необходимо поддерживать в ходе естественной эволюции кода или интерфейса, это иногда может вызывать проблемы с производительностью или безопасностью, а несоответствия в поведении интерфейсов иногда могут приводить к новым ошибкам в программном обеспечении, использующем его, создавая трудноразрешимые многонаправленные перекрестные зависимости между различными частями кода. [3]
Примеры
ДОС
Примеры можно найти в MS-DOS / PC DOS : когда MS-DOS/PC DOS 3.1 и выше (включая Windows 9x ) и OS/2 обнаруживают определенные метки FAT OEM , они не доверяют некоторым значениям блока параметров BIOS (BPB) и пересчитывают их из других параметров геометрии диска, чтобы обойти несколько ошибок вычислений с отклонением на единицу, вызванных некоторым их программным обеспечением форматирования в более ранних выпусках этих систем. [4] [5] [6] [7] Хотя это недокументированное поведение позволяет им справляться с этими неправильно отформатированными томами в частности, оно ограничивает гибкость геометрии дисков, с которой они могут работать в целом, и может привести к тому, что они будут удалять правильно отформатированные тома, созданные сторонними организациями, если они отклоняются от значений по умолчанию, используемых Microsoft и IBM . [6] [7]
Когда MS-DOS/PC DOS 5.0 и выше работают на процессорах 286 или выше, резидентный исполняемый загрузчик содержит код, специально разработанный для обнаружения и исправления некоторых распространенных приложений и загрузчиков-заглушек (например, программ, связанных со старыми версиями EXEPACK от Microsoft или расширителями DOS 386 от Rational Systems ) путем исправления загруженного образа программы перед ее выполнением. [8] При определенных условиях базовая DOS также исправляет Windows (WINA20.386). [9]
В ходе разработки DR-DOS также пришлось модифицировать, чтобы не только эмулировать множество недокументированных особенностей и нежелательных свойств MS-DOS и PC DOS (например, необходимость использовать определенные вводящие в заблуждение имена файлов, такие как IBMBIO.COM , IBMDOS.COM или COUNTRY.SYS для файлов, которые не соответствуют спецификациям для исполняемых файлов в DOS, [10] [11] [12] [nb 1] или необходимость ввести внутреннюю структуру текущего каталога (CDS) с ограниченной длиной пути к каталогу [9] [13] [14] ), но и фактические ошибки в ядре и нескольких драйверах, чтобы заставить некоторые другие драйверы и приложения работать в DR-DOS, когда они тестировались только на определенных версиях MS-DOS. [9] [6] [8] [15] [16] [17]
Окна
Windows , которая традиционно эмулировала множество старых системных ошибок, чтобы позволить старым низкоуровневым программам работать, является еще одним примером. В результате Wine , который позволяет запускать множество приложений Windows на других платформах, также должен поддерживать совместимость с ошибками Windows. [18]
Другой
Во время разработки IBM PC-совместимого продукта инженеры Compaq обнаружили, что Microsoft Flight Simulator не запускается из-за того, что Брюс Артвик из subLOGIC описал как «ошибку в одном из чипов Intel », что заставило их сделать свой компьютер совместимым с IBM PC по ошибкам. [19] Другой пример аппаратного обеспечения можно найти в конструкции адресной линии IBM Personal Computer/AT A20 для эмуляции поведения старых процессоров. [8] [15]
В Microsoft Excel всегда была преднамеренная ошибка високосного года , которая ошибочно считала 29 февраля 1900 года фактической датой, чтобы обеспечить обратную совместимость с Lotus 1-2-3 . [20]
Хайрам Райт, инженер Google , рассказывает об этой проблеме, которую он наблюдал воочию, работая над основными библиотеками C++. Именно Титус Уинтерс, также инженер Google, популяризировал эту концепцию в более широком масштабе как « Закон Хайрама ». [21]
Заголовок HTTP referer — это неправильное написание слова referrer . Это была ошибка в исходном веб-предложении, и она была сохранена для совместимости.
Смотрите также
Примечания
- ^ Файлы IBMBIO.COM и IBMDOS.COM — это специальные двоичные образы, содержащие исполняемый код . Случайная попытка запустить их из командной строки, как если бы они были обычными программами в стиле COM, привела бы к сбою системы. Вот почему эти файлы имеют атрибут hidden , установленный в MS-DOS / PC DOS . Этого можно было бы избежать, выбрав другие расширения файлов (например, DRBIOS.SYS и DRBDOS.SYS ), но это нельзя было сделать позже, чтобы сохранить совместимость с различными инструментами, ожидающими эти конкретные имена файлов. Чтобы исключить риск сбоев, эти файлы были изменены на толстые двоичные файлы с DR-DOS 7.02 и выше, теперь включающими крошечные заглушки для корректного выхода при ненадлежащем вызове. [a] [b]
Ссылки
- ^ "bug-for-bug compatible". catb.org .
То же, что и bug-compatible, с дополнительным намеком на то, что много утомительных усилий было потрачено на то, чтобы гарантировать, что каждая (известная) ошибка была воспроизведена.
- ^ "Bug-compatible - www.jargon.net" . Получено 2010-02-03 .
- ^ Понтин, Джейсон (1994-12-26). «Третья задержка Windows 95; требуется полировка». InfoWorld . 16 (52). InfoWorld Media Group, Inc.: 18.
- ^ Уильямс, Дэйв (1992-01-12). Технический справочник программиста для MSDOS и IBM PC. ISBN 1-878830-02-3. DOSREF . Получено 2012-01-08 .(Примечание. Автор упоминает, что DOS 4.0 проверяет этикетку OEM, но отрицает, что DOS 3.2 также ее проверяет (хотя это так).)
- ^ Басс, Уолли (1994-02-14). "Размер кластера". Группа новостей : comp.os.msdos.programmer. Архивировано из оригинала 2017-09-09 . Получено 2006-10-14 .
- ^ abc Paul, Matthias R. (2002-02-20). "Need DOS 6.22 (Not OEM)". alt.msdos.programmer . Архивировано из оригинала 2017-09-09 . Получено 2006-10-14 .
- ^ ab Paul, Matthias R. (2004-08-25). "NOVOLTRK.REG". www.drdos.org . Архивировано из оригинала 2016-03-04 . Получено 2011-12-17 .[1]
- ^ abc Paul, Matthias R. (2002-10-07). "Re: masm .com (PSP) related trouble". alt.lang.asm . Архивировано из оригинала 2017-09-03 . Получено 2017-09-03 .
- ^ abc Шульман, Эндрю; Браун, Ральф Д .; Макси, Дэвид; Михельс, Рэймонд Дж.; Кайл, Джим (1994) [ноябрь 1993]. Недокументированная DOS: руководство программиста по зарезервированным функциям и структурам данных MS-DOS — расширено для включения MS-DOS 6, Novell DOS и Windows 3.1 (2-е изд.). Reading, Массачусетс: Addison Wesley . ISBN 0-201-63287-X.(xviii+856+vi страниц, 3,5-дюймовая дискета) Опечатки: [2][3]
- ^ Пол, Маттиас Р. (1997-10-02). "Caldera OpenDOS 7.01/7.02 Update Alpha 3 IBMBIO.COM README.TXT". Архивировано из оригинала 2003-10-04 . Получено 2009-03-29 .[4]
- ^ DR-DOS 7.03 WHATSNEW.TXT — Изменения с DR-DOS 7.02 на DR-DOS 7.03. Кальдера, Инк . 24 декабря 1998 г. Архивировано из оригинала 8 апреля 2019 г. Проверено 08 апреля 2019 г.
- ^ Пол, Маттиас Р. (2001-06-10) [1995]. "Формат файла DOS COUNTRY.SYS" (файл COUNTRY.LST) (ред. 1.44). Архивировано из оригинала 2016-04-20 . Получено 2016-08-20 .
- ^ Пол, Матиас Р. (1997-06-07) [апрель 1994 г.]. «Глава 1.3.xi: Überlange Pfade». NWDOS7UN.TXT — Zusammenfassung der dokumentierten und undocumentierten Fähigkeiten von Novell DOS 7. MPDOSTIP (на немецком языке). Архивировано из оригинала 07.11.2016 . Проверено 7 ноября 2016 г.
- ^ Пол, Матиас Р. (30 июля 1997 г.) [1 мая 1994 г.]. NWDOS-TIPs — советы и подсказки для Novell DOS 7, с просмотром недокументированных подробностей, ошибок и обходных путей. MPDOSTIP (на немецком языке) (3-е изд.). Архивировано из оригинала 10 сентября 2017 г. Проверено 6 августа 2014 г.(Примечание. NWDOSTIP.TXT — это комплексная работа по Novell DOS 7 и OpenDOS 7.01, включающая описание многих недокументированных функций и внутренних компонентов. Она является частью еще более обширной
MPDOSTIP.ZIP
коллекции автора, которая поддерживалась до 2001 года и распространялась на многих сайтах в то время. Приведенная ссылка указывает на более старую версию файла, преобразованную в HTML NWDOSTIP.TXT
.) [5] - ^ ab Paul, Matthias R. (2002-02-02). "Treiber dynamisch nachladen (Intra-Segment-Offset-Relokation zum Laden von TSRs in die HMA)" [Динамическая загрузка драйверов (внутрисегментное смещение для загрузки TSRs в HMA)]. de.comp.os.msdos (на немецком языке). Архивировано из оригинала 2017-09-09 . Получено 2017-07-02 .(Примечание. Дает всесторонний обзор истории и «природы» HMA , а также неочевидных ограничений проектирования, которые следует учитывать при разработке расширений резидентной системы для загрузки в HMA.)
- ^ Пол, Маттиас Р. (2002-04-01). "Исправление для расширителя CauseWay DOS под DR-DOS 7.0x EMM386.EXE". Группа новостей : comp.os.msdos.programmer. Архивировано из оригинала 2018-09-19 . Получено 2018-09-19 .
- ^ Пол, Маттиас Р. (2001-08-18). "Re: [fd-dev] О GRAFTABL и DISPLAY.SYS (было: Изменение кодовых страниц в FreeDOS)". freedos-dev . Архивировано из оригинала 2017-09-04 . Получено 2017-09-04 .
- ^ "WineFeatures - Официальная винная вики" . Получено 2010-02-03 .
- ^ Якал, Кэти (январь 1985 г.). «Брюс Артвик / Разработчик Flight Simulator II». Compute!'s Gazette . стр. 32. Получено 06.07.2014 .
- ^ Excel ошибочно предполагает, что 1900 год — високосный. Получено 01.05.2019.
- ^ "Программная инженерия в Google [Книга]". www.oreilly.com . Получено 2022-05-31 .