1. Железо произведено непонятно кем
В современных компьютерах есть несколько проблем. Во-первых, до сих пор в железе остаются архаичные решения, которые тянутся ещё с бородатых времён. К примеру, архитектура процессоров x86 появилась ещё в 1978 году в виде 16-битной версии. В 1985-м была представлена 32-битная версия, а в 2003-м — 64-битная. И хотя современные процессоры серьёзно отличаются от тех, что работали в компьютерах конца 70-х, в них до сих пор есть множество устаревших решений, причём как в архитектурном, так и в командном плане.
Во-вторых, виновата и технология Plug and Play. Да, это здорово, что ты можешь воткнуть новую видеокарту в материнскую плату, и она сразу определится компьютером, но тут есть и достаточно серьёзный минус. Дело в том, что до сих пор у многих людей в компьютерах установлено устаревшее железо, которое произвела какая-нибудь небольшая компания, давно отправившаяся на небеса. Естественно, никаких обновлений для такого железа выпускаться уже не будет. А это значит, что его внедрением в ту же Windows 10 приходится заниматься программистам из Microsoft и смежных контор, буквально заново изобретая велосипед. А это часто приводит к серьёзным багам.
2. Написанный криво и внедрённый нелепо код
Даже человек, не знакомый со сферой IT, слышал когда-нибудь выражение «индусский код». Если вкратце, то это плохой, неоптимизированный код, который изобилует неточностями и глупостями. Чтобы тебе было проще понимать, представь, что тебя попросили взять со стола ложку, вилку и тарелку и отнести их в раковину. Что сделает нормальный человек? Положит приборы в тарелку и отнесёт всё вместе.
«Индусский код» же работает следующим образом: ты берёшь ложку, несёшь её к раковине, кладёшь, возвращаешься за следующим прибором или посудой — и так по кругу. При этом ты тратишь время и нервы. Вот и в твоём компьютере много «индусского кода», который загружает машину на 100 %, и ты не понимаешь, как эта программа весом в несколько мегабайт может потреблять так много ресурсов.
Другая проблема — «костыли». Это такие заплатки, которые позволяют системе работать «нормально». И каждая такая заплатка добавляет в нее много мусора и багов. Так, например, чтобы сделать старые программы совместимыми ещё с первой версией Windows, программистам Microsoft приходилось внедрять «костыли», чтобы код, рассчитанный на командную строку, работал и в привычном тебе визуальном интерфейсе. Ну а про Windows 10 и говорить нечего, так как совместимость ей нужна даже с предыдущей версией.
Как итог — в современной Windows 10 более семи тысяч таких заплаток, которые помогают «обмануть» старую программу и заставить думать, что она запускается на древнем железе с допотопной операционной системой. А отсюда и баги, и вылеты, и даже уход в синий экран смерти.
3. Политические мотивы
Разработчикам программного обеспечения нужно заботиться о такой, казалось бы, не особо важной вещи, как страна и регион пользователя. Причём к этому вопросу нужно подходить максимально ответственно, иначе компания рискует нарваться на гнев целого государства.
Возьмём к примеру Microsoft. Ей приходится точно прорабатывать часовые пояса и выбор региона для всех стран, причём с оглядкой на политику каждой. Однажды Microsoft сделала изображение карты, где нужно выбирать часовой пояс при установке времени, и поместила некоторые индийские города в часовой пояс Пакистана. Из-за этого Индия пригрозила полным запретом продуктов компании в стране. И так с каждой деталью.
Из-за таких противоречий с тем, чей там город/остров/любой другой клочок земли, какой там язык и часовой пояс, в системах и программах накапливаются взаимоисключающие строчки кода, которые порой приводят к багам.
10 необычных дизайнов компьютеров, которые ты и представить не мог
4. Антимонопольные процессы
Представь, что ты делаешь стулья от и до, из своей древесины и с определённой обивкой, и всех всё устраивает. Но приходит антимонопольная комиссия и говорит, что ты, натягивая на стулья мягкую обивку, лишаешь прибыли мастеров по ремонту, поэтому должен прекратить это делать, иначе огромный штраф. И теперь ты выпускаешь стулья без обивки.
Только в случае с кодом всё куда сложнее. Допустим, антимонопольной комиссии не нравится, что Microsoft предустанавливает в Windows свой браузер и антивирус, ведь это удар по конкурентам. Тогда Microsoft приходится вырезать эти программы, которые связаны с другим софтом, а те, в свою очередь, — с другим. В итоге образуется дыра, которую нужно закрывать заглушками. А так как весь код, связанный с удалённым компонентом, никто просматривать не будет, система становится более забагованной.
5. Патентные войны
Мы живём в капиталистическом мире, где изобретения по большей части принадлежат не всему человечеству, а определённым компаниям. Некоторые из них становятся общедоступными через какое-то время, другие же навеки принадлежат своим создателям. И тем, кто разрабатывает любую программу с привычными тебе курсором, плавающей стрелкой, перекрестием прицела, нужно отстегнуть немного (а порой и миллионы) долларов тому, кто запатентовал это.
Как ты понимаешь, не у всех есть деньги, чтобы оплачивать возможность использования двойного клика в приложении, и поэтому программистам приходится обходить патенты, заново изобретая то, что уже давно создано. А это добавляет программам веса и, конечно же, багов. Скажи за это спасибо так называемым копирастам.
6. Попытки сделать системы и софт подходящими всем
Согласись, делать несколько версий приложения для разных рынков только потому, что где-то нельзя изображать оружие, а значит, вместо мин в «Сапёре» будут цветочки, — это глупо. Поэтому программисты и дизайнеры внедряют в свои продукты сразу несколько версий, собирая их в общий комбайн. И как ты знаешь, чем больше в чём-либо деталей, тем с большей вероятностью это что-то поломается.
И это не только подобные замены «шокирующего» материала, но и особенности стран и народностей. Например, обязательно придётся внедрять в программу написание справа налево для арабского, фарси и иврита, понимание китайских и японских иероглифов, возможность использования для людей с нарушением восприятия цветов, для людей, имеющих одну руку, и так далее.