Английская Википедия:Bug compatibility

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Шаблон:Short description Шаблон:Use dmy dates Шаблон:Use list-defined references Computer hardware or software is said to be bug compatible if it exactly replicates an undesirable feature[1] of a previous version. The phrase is found in the Jargon File.[2]

An aspect of maintaining backward compatibility with an older system is that such systems' client programs often do not only depend on their specified interfaces but also bugs and unintended behaviour. That must also be preserved by the newer replacement. Besides the significantly higher complexity that needs to be maintained during the natural evolution of the code or interface, it can sometimes cause performance or security issues, and the inconsistencies in the behaviour of interfaces can sometimes lead to new bugs in the software using it, creating difficult to resolve multi-directional cross dependencies between various pieces of code.[3]

Examples

DOS

Examples can be found in MS-DOS/PC DOS: When MS-DOS/PC DOS 3.1 and higher (including Windows 9x) and OS/2 detect certain FAT OEM labels, they do not trust some BIOS Parameter Block (BPB) values and recalculate them from other disk geometry parameters in order to work around several off-by-one calculation errors caused by some of their formatter software under earlier issues of these systems.[4][5][6][7] While this undocumented behaviour allows them to cope with these incorrectly formatted volumes specifically, it limits the flexibility of disk geometries they can work with in general and can cause them to trash validly formatted volumes created by third-parties if they deviate from the defaults used by Microsoft and IBM.[6][7] When MS-DOS/PC DOS 5.0 and higher are running on 286 or higher processors, the resident executable loader contains code specially designed to detect and fix certain widespread applications and stub loaders (such as programs linked with older versions of Microsoft's EXEPACK or Rational Systems' 386 DOS extenders) by patching the loaded program image before executing it.[8] Under certain conditions an underlying DOS also patches Windows (WINA20.386).[9]

Over the course of development, DR-DOS also had to be modified to not only emulate many undocumented peculiarities and undesirable properties of MS-DOS and PC DOS (like having to use certain misleading filenames such as IBMBIO.COM, IBMDOS.COM or COUNTRY.SYS for files which do not follow the specs for executables under DOS,[10][11][12][nb 1] or having to introduce a directory path length-limited Current Directory Structure (CDS) internally[9][13][14]), but also actual bugs in the kernel and several drivers, in order to make certain other drivers and applications run on DR-DOS, when they were tested on specific versions of MS-DOS only.[9][6][8][15][16][17]

Windows

Windows, which has traditionally emulated many old system bugs to allow older low-level programs to run, is another example. As a result, Wine, which makes it possible to run many Windows applications on other platforms, also needs to maintain bug compatibility with Windows.[18]

When Microsoft phased out support for 16-bit code in Windows by no longer including NTVDM in 64-bit editions of the operating system, the executable loader was modified to recognize some specific 16-bit stub launchers and installers and replace them on-the-fly with equivalent code stubs that run on 64-bit processors.[19][20]

Other

During development of its IBM PC compatible, Compaq engineers found that Microsoft Flight Simulator would not run because of what subLOGIC's Bruce Artwick described as "a bug in one of Intel's chips", forcing them to make their computer bug-compatible with the IBM PC.[21] Another hardware example is found in the design of the IBM Personal Computer/AT A20 address line to emulate the behaviour in older processors.[8][15]

Microsoft Excel has always had a deliberate leap year bug, which falsely treats 29 February 1900 as an actual date, to ensure backward compatibility with Lotus 1-2-3.[22]

Hyrum Wright, an engineer at Google, talks about this problem that he observed firsthand while working on C++ core libraries. It was Titus Winters, also an engineer at Google, who popularized this concept on a larger scale as "Hyrum's Law".[23]

See also

Шаблон:Portal

Notes

Шаблон:Reflist

References

Шаблон:Reflist

  1. Ошибка цитирования Неверный тег <ref>; для сносок bugforbug не указан текст
  2. Ошибка цитирования Неверный тег <ref>; для сносок Jargon не указан текст
  3. Ошибка цитирования Неверный тег <ref>; для сносок polish не указан текст
  4. Ошибка цитирования Неверный тег <ref>; для сносок Williams_1992_MS-DOS-Reference не указан текст
  5. Ошибка цитирования Неверный тег <ref>; для сносок Bass_1994_OEM не указан текст
  6. 6,0 6,1 6,2 Ошибка цитирования Неверный тег <ref>; для сносок Paul_2002_OEM не указан текст
  7. 7,0 7,1 Ошибка цитирования Неверный тег <ref>; для сносок Paul_2004_OEM не указан текст
  8. 8,0 8,1 8,2 Ошибка цитирования Неверный тег <ref>; для сносок Paul_2002_EXEC не указан текст
  9. 9,0 9,1 9,2 Ошибка цитирования Неверный тег <ref>; для сносок Schulman_1994_Undocumented-DOS не указан текст
  10. Ошибка цитирования Неверный тег <ref>; для сносок Paul_1997_OD-A3 не указан текст
  11. Ошибка цитирования Неверный тег <ref>; для сносок Caldera_1998_NEW703 не указан текст
  12. Ошибка цитирования Неверный тег <ref>; для сносок Paul_2001_COUNTRY не указан текст
  13. Ошибка цитирования Неверный тег <ref>; для сносок Paul_1997_NWDOS7UN не указан текст
  14. Ошибка цитирования Неверный тег <ref>; для сносок Paul_1997_NWDOSTIP не указан текст
  15. 15,0 15,1 Ошибка цитирования Неверный тег <ref>; для сносок Paul_2002_HMA не указан текст
  16. Ошибка цитирования Неверный тег <ref>; для сносок Paul_2002_EMM386 не указан текст
  17. Ошибка цитирования Неверный тег <ref>; для сносок Paul_2001_GRAFTABL не указан текст
  18. Ошибка цитирования Неверный тег <ref>; для сносок Wine не указан текст
  19. Ошибка цитирования Неверный тег <ref>; для сносок Microsoft_64 не указан текст
  20. Ошибка цитирования Неверный тег <ref>; для сносок Microsoft_KB896458 не указан текст
  21. Ошибка цитирования Неверный тег <ref>; для сносок Yakal_1985 не указан текст
  22. Ошибка цитирования Неверный тег <ref>; для сносок Microsoft article about leap year bug не указан текст
  23. Шаблон:Cite web


Ошибка цитирования Для существующих тегов <ref> группы «nb» не найдено соответствующего тега <references group="nb"/>