junk dna (программистское)
May. 29th, 2010 08:36 pmЗамечательный образ в записи Реймонда Чена:
Но что в коде MS-DOS специально оставляли куски байтов из предыдущих версий, которые и не запускались никогда, но нужны были для старых программ, которые специально их искали - этого я не знал. Это уже почти за пределами моего понимания.
Когда очередные победители будут в очередной раз писать историю первых десятилетий персональных компьютеров, давайте и это вспомним. Уверенная победа Майкрософта была обусловлена многими причинами: глупыми поступками IBM, недальновидностью Apple, агрессивной тактикой самого Майкрософта по экслюзивным сделкам с OEM... но еще и героическими усилиями во имя совместимости старых приложений с новыми версиями ОС и даже с новыми ОС. Никакой программист не хочет заниматься такой мутной херней - но важность ее для пользователей Майкрософт понимала лучше всех своих конкурентов.
MS-DOS is perhaps one of the strongest examples of requiring absolute unyielding backward compatibility. Hundreds if not thousands of programs scanned memory looking for specific byte sequences inside MS-DOS so it could patch them or hunted around inside MS-DOS's internal state variables so it could modify them. If you move one thing out of place, those programs stop working.Я не знал об этом. Я знал, что DOS и Windows проводили политику фанатичной совместимости с предыдущими версиями. Я знал, что во всех версиях Windows хранится и пополняется список "совместимых программ": когда Windows распознает, что бежит такая программа, она специально возвращает ей нестандартные результаты на определенные системные вызовы - потому что такие результаты возвращала какая-то прошлая версия, и данная программа этим пользуется, хоть они и были недокументированы.
MS-DOS contains chunks of "junk DNA", code fragments which do nothing but waste space, but which exist so that programs which go scanning through memory looking for specific byte sequences will find them. (This principle is not dead; there's even some junk DNA in Explorer.)
Но что в коде MS-DOS специально оставляли куски байтов из предыдущих версий, которые и не запускались никогда, но нужны были для старых программ, которые специально их искали - этого я не знал. Это уже почти за пределами моего понимания.
Когда очередные победители будут в очередной раз писать историю первых десятилетий персональных компьютеров, давайте и это вспомним. Уверенная победа Майкрософта была обусловлена многими причинами: глупыми поступками IBM, недальновидностью Apple, агрессивной тактикой самого Майкрософта по экслюзивным сделкам с OEM... но еще и героическими усилиями во имя совместимости старых приложений с новыми версиями ОС и даже с новыми ОС. Никакой программист не хочет заниматься такой мутной херней - но важность ее для пользователей Майкрософт понимала лучше всех своих конкурентов.
no subject
Date: 2010-05-29 05:42 pm (UTC)no subject
Date: 2010-05-29 05:56 pm (UTC)Я бы это описал немного иначе
Date: 2010-05-29 05:57 pm (UTC)Программы патчили дос и меняли внутренние переменные состояния не от хорошей жизни, а от того, что в дос не было штатных API для того, чтобы сделать простые вещи.
А теперь вся эта junk DNA рушится под собственной тяжестью. Люди, которые весь этот джанк писали, ушли на пенсию, и единственный способ, которым микрософт может обеспечить совместимость со старым софтом - это запуск XP в виртуалке.
no subject
Date: 2010-05-29 06:08 pm (UTC)Только все-таки одно стандартное микрософтовское вранье они повторяют - что винда основана на VMS.
no subject
Date: 2010-05-29 06:08 pm (UTC)Re: Я бы это описал немного иначе
Date: 2010-05-29 06:12 pm (UTC)no subject
Date: 2010-05-29 06:14 pm (UTC)Я не помню, чтобы Майкрософт как-то особенно настаивала, что Windows основана на VMS, им это с маркетинговой точки зрения могло скорее помешать, чем помочь.
no subject
Date: 2010-05-29 06:16 pm (UTC)Победили они при этом себя тоже - Xenix, OS/2 - все пали жертвой. Им сколько понадобилось чтобы все-таки пропихнуть новую архитектуру ОС - 15 лет?
То что разработка для MS-DOS постоянно требовала копания в кишках, подмены каких-то interrupt handlers и прочих хаков, которые должны бы были уже отмереть вмести с эпохой Sinclair Spectrum - это серьезная проблема архитектуры. Хвалить Майкрософт за то, что они были вынуждены много лет это поддерживать, это примерно как если бы я сейчас сказал с восторгом "смотрите! Это 2010 год, я работаю с своим виртуализированным линуксом в cloud на супер-дупер серверах с 48 процессорами каждый, через канал, три раза зашифрованный так, что никто не расшифрует за сто лет, а внутри, представляете, эмулируется пишущая машинка!"
no subject
Date: 2010-05-29 06:17 pm (UTC)Re: Я бы это описал немного иначе
Date: 2010-05-29 06:23 pm (UTC)Re: Я бы это описал немного иначе
Date: 2010-05-29 06:26 pm (UTC)no subject
Date: 2010-05-29 06:27 pm (UTC)no subject
Date: 2010-05-29 06:27 pm (UTC)Там были «точки входа» RSTx, но это было значительно менее удобно, чем прерывания в PC.
Re: Я бы это описал немного иначе
Date: 2010-05-29 06:28 pm (UTC)Re: Я бы это описал немного иначе
Date: 2010-05-29 06:29 pm (UTC)Re: Я бы это описал немного иначе
Date: 2010-05-29 06:30 pm (UTC)Re: Я бы это описал немного иначе
Date: 2010-05-29 06:30 pm (UTC)http://www.ctyme.com/rbrown.htm
:)
no subject
Date: 2010-05-29 06:31 pm (UTC)no subject
Date: 2010-05-29 06:33 pm (UTC)Re: Я бы это описал немного иначе
Date: 2010-05-29 06:37 pm (UTC)Re: Я бы это описал немного иначе
Date: 2010-05-29 06:38 pm (UTC)no subject
Date: 2010-05-29 06:38 pm (UTC)Сходство механизмов обработки исключений в OS/2 и VMS, как я понимаю, объясняется скорее влиянием MVS, чем заимствованием.
Re: Я бы это описал немного иначе
Date: 2010-05-29 06:39 pm (UTC)С приятелем мы пили за прерывания ДОСа по номерам, в ожидании что когда дойдем до 21, то начнем пить за отдельные опкоды. Но так ни разу и не добрались.
Re: Я бы это описал немного иначе
Date: 2010-05-29 06:44 pm (UTC)Только немного другими словами.
Документированный API был куцый, малофункциональный и кривой, поэтому и приходилось извращаться. То есть все патчение ядра ДОС происходит от того, что микрософт не подумал предоставить штатную функциональность.
no subject
Date: 2010-05-29 06:51 pm (UTC)