Есть кое-что, что я нахожу очень забавным в использовании символов авторского права и товарных знаков в играх. Я понимаю, почему эти символы важны в юридическом контексте, но, например, так ли уж важно было отображать ® или ™ рядом с именем каждого персонажа в файтинге Dragon Ball Z Budokai 3 на PlayStation® 2? Все знают, что у тебя есть Goku, чувак. Они не могут украсть его только потому, что вы не прикрепили где-нибудь этот значок.
Но я полагаю, что корпоративные юридические отделы часто добиваются своего, даже если конечный результат выглядит глупо или вызывает настоящую головную боль. Недавно я узнал об идеальном примере последнего, прочитав о драйверах Bluetooth для Windows, и, клянусь богом, это интереснее и смешнее, чем вы ожидаете, любая история о драйверах Bluetooth для Windows.
В далеком 2006 году Microsoft выпустила, казалось бы, безобидное устройство называется Microsoft Wireless Notebook Presenter Mouse 8000. Это произошло всего через четыре года после того, как компания выпустила первую в мире Bluetooth-мышь; в то время технология была еще довольно новой, и беспроводные офисные мыши станут популярными только через десять лет. Мышь Presenter Mouse не была ориентирована на точность или скорость опроса, как игровая мышь; ее особенность заключалась в том, что внизу у нее было множество кнопок для перемещения вперед и назад в презентации PowerPoint, изменения громкости и т. д. Она была предназначена для презентаций. Как я уже сказал, она была безобидной. Похоже на то. Оказывается, беспроводная мышь Microsoft Wireless Notebook Presenter Mouse 8000 также пользуется дурной славой, по крайней мере, среди программистов, которые регулярно копаются в недрах кода драйверов Windows. Потому что в глубине драйверов Bluetooth для Windows вы можете найти название мыши, написанное простым английским языком. Это очень необычно.
«Соответствуют ли драйверы Microsoft Bluetooth для беспроводной мыши Microsoft Notebook Presenter Mouse 8000 требованиям? Это что, какой-то сговор? Нет, дело не в этом», — недавно написал ветеран Microsoft-разработчик Рэймонд Чен в своем блоге The Old New Thing. Как объяснил Чен, существует множество нестандартных устройств, которые при подключении ведут себя не так, как должны. Возможно, они не соответствуют правилам протокола USB. Возможно, кто-то допустил незначительную опечатку, которая ускользнула от внимания. Возможно, они думали, что соблюдают правила, потому что версия Windows, на которой они тестировали, на самом деле не соответствовала некоторым требованиям безопасности, но более позднее обновление ужесточило стандарты.
Иногда такого рода ошибки могут привести к сбою в работе компьютера. Но обычно для «фанкового» оборудования просто требуется, чтобы в код драйвера Windows был включен какой-то небольшой обходной путь для анализа того, что они должны были делать. Гораздо, гораздо более необычным является сбой устройства на самом первом этапе: в буквальном смысле слова, когда оно получает правильное название.
«В большинстве случаев код для компенсации ошибок такого типа не выдает своего присутствия в виде жестко закодированных строк. Вместо этого у вас есть ветки «else», которые тайно восстанавливают или игнорируют поврежденные значения», — написал Чен. «К сожалению, ошибка, допущенная Microsoft Wireless Notebook Presenter Mouse 8000, легко обнаруживается с помощью строк, потому что они перепутали свою строку!»
Итак, что именно все это означает? Жесткое кодирование (встраивание некоторых специфических данных прямо в исходный код), как правило, является проблемой программирования, поэтому, если команде Windows пришлось что-то жестко кодировать в драйвере Bluetooth, это, должно быть, было действительно неправильно.
У каждого аппаратного устройства есть «локальное имя- в его коде, который его идентифицирует. Это имя должно быть закодировано в соответствии со стандартом UTF-8, который на сегодняшний день является наиболее распространенным стандартом кодировки цифрового текста. Сегодня эта статья и почти весь Интернет следуют ему. Но знаете, что не соответствовало ему? Microsoft Wireless Notebook Presenter Mouse 8000.
Вот как Чен объяснил проблему:
«Microsoft Wireless Notebook Presenter Mouse 8000 сообщает о своем названии как Microsoft⟪AE⟫ Wireless Notebook Presenter Mouse 8000, кодируя символ зарегистрированного товарного знака ® не как UTF-8, как того требует спецификация, но на кодовой странице 1252. Что еще хуже, так это то, что простая «AE» не является допустимой последовательностью UTF-8, поэтому строка даже не будет отображаться как поврежденная; она будет отклонена как недопустимая».
(Изображение предоставлено Microsoft)
Кодовая страница 1252, она же Windows-1252, была доминирующим стандартом кодирования для устройств Windows с 80-х до конца 90-х годов. Если вы помните, что когда-либо открывали документ, созданный в Windows, на компьютере Mac, и видели кучу вопросительных знаков, то это потому, что Windows-1252 включала символы, которые не могли быть отображены другими операционными системами. К счастью, с повсеместным распространением UTF-8 в наши дни подобные неприятности случаются редко.
Но когда разрабатывался беспроводной ноутбук Presenter Mouse 8000, кто-то в Microsoft, по-видимому, все еще упорно (или случайно) использовал старый формат кодировки. Или, может быть, мышь на самом деле стала жертвой ошибочного копирования/вставки.
«Спасибо, юридический отдел, что вставили букву ® в описание и все испортили», — написал Чен. «В драйверах Bluetooth есть специальная таблица «Устройства, которые сообщают о неправильных названиях (и правильное имя для использования)». Если стек Bluetooth видит одно из этих устройств и выдает неправильное имя, то заменяется правильное имя.
«В настоящее время в этой таблице содержится только одна запись».