Знаешь, твоё непонимание небезопасности этого массива говорит не столько о том, что раст какой-то не такой, сколько о том, что из тебя совершенно никакой системный программист.Видеопамять -- это интерфейс к внешнему железу, работа с видеопамятью должна быть синхронизирована вся. Ну например, хочешь ты копировать спрайт из одного места видеопамяти, в другое -- оттуда где его не видно, в то место, где видно. Например, ты рисуешь анимацию какую-то, кадры у тебя заранее загружены в видеопамять, чтобы не тормозить в процессе рендера, и теперь тебе надо скопировать.
Как это делать? Надо настроить регистры VGA на копирование, может быть нужные операции над битами вставить, и после этого ты запускаешь цикл где копируешь строками. На уровне асма это сводится к чему-то типа movsb, где, например, каждый копируемый бит соответствует одному пикселю на экране. Тут очень важно, чтобы за чтением байта из видеопамяти следовала бы его запись туда. Если между этим чтением и записью байта вмешается, скажем, ещё какое-то чтение из другого места, то будет записано 8 левых пикселей.
А теперь прикинь, что в процессе выполнения этого цикла случилось прерывание, и какой-то совершенно другой код начал выполнять какие-то операции с видеокартой -- перенастроил режимы/регистры, и начал что-то там творить. Что будет? Будет мусор на экране.
Чтобы такого не случалось, люди выкручиваются как могут. В DOS'е было довольно просто с этим, были простые правила:
1. не выводить ничего из обработчиков прерываний
2. однопоточная программа, никакой многозадачности, лучше в том числе и кооперативной.
Но если мы прикинем вариант, что с VGA карточкой работает современная операционная система, то тут встаёт куча проблем с синхронизацией. Например надо X11 одеть поверх видеокарты, чтобы приложения бы общались с X11, заказывая выполнение операций, а X11 бы уже упорядочивал бы их и выполнял бы "атомарно".
Если ты заглянешь в ядро, там тоже далеко не любому коду позволяется работать с видеопамятью. Видеопамятью заправляет драйвер видеокарты, он выставляет наружу API, который может не все косяки запрещает клиентскому коду, но часть их он запрещает.
В ядре делается именно то, к чему тебя будет подталкивать rust, разница лишь в том, что в ядре тебя к правильному стилю будут подталкивать ревьюеры кода, здесь же всё начнётся раньше: тебя будет к этому подталкивать rustc.