Семья Толедо (пригород Мехико) и разнообразная техника их кустарного производства, в том числе компьютер, 1980 год
Оскар Толедо — пятикратный победитель программистского конкурса IOCCC, (Международный конкурс обфусцированного кода на С). Он интересен не только сам по себе, но ещё в контексте своей семьи. Это уникальные люди, которые скромно живут в пригороде Мехико и вообще не стремятся к известности. 25 лет назад они написали свою ОС, браузер и кучу софта для него.
Оскар Толедо — просто продолжатель семейного дела, которое началось примерно в 70-е годы прошлого века.
Оскар родился в 1978 году, программирует с пяти лет, а ассемблер выучил в девять. Потом освоил Pascal, C, C++, Java, Javascript, HTML, CSS и PHP, но ассемблер остаётся его основным языком. Пишет лаконичные и концептуальные программы, в этой лаконичности он чем-то напоминает Фабриса Беллара, хотя с этим титаном программирования мало кто может сравниться.
Живёт с семьёй в Мексике, пишет софт и книги о нём, продаёт ретротехнику и картриджи. Ну и участвует в бизнесе семьи, наверное (о нём ниже).
Пожалуй, самая интересная его разработка — операционная система BootOS, опубликованная на Github в 2019 году.
▍ BootOS
BootOS — операционная система в 512 байтах машинного кода x86, выполненная как монолитное ядро. Она помещается в загрузочный сектор, отсюда и название. Подходит для любых дискет от 180 КБ и изначально писалась для компьютеров 8088. Вероятно, она была написана ещё два десятилетия назад, а только четыре года назад опубликована. Или другой вариант, что Толедо или его клиенты используют такие компьютеры до сих пор. Есть такие любители ретротехники (именно для постоянного использования, чтобы реально играть на ней).
BootOS умеет загружать, исполнять и сохранять программы в файловой системе. Используются дорожки от 0 до 32, сторона 0, сектор 1. Каталог записан на дорожке 0, сторона 0, сектор 2. Каждая запись в каталоге имеет размер 16 байт и содержит ASCII-имя файла, заканчивающееся нулевым байтом. Поскольку размер сектора 512 байт, в каталог можно записать только 32 файла. То есть на дискете можно хранить только такое количество. Удаление файла сводится к обнулению всей записи.
Уместить полноценный CLI и минималистичную файловую систему в 512-байтный загрузочный сектор дискеты — не такое малое достижение.
BootOS собирается с помощью Netwide Assembler (nasm), этот ассемблер для x86 работает практически на любой современной платформе, поэтому он и называется netwide.
▍ Другие проекты
Вот некоторые программы Толедо. Далеко не все, потому что он ещё написал множество игр для разных консолей (Intellivision, Atari 2600 и др.), в том числе «бутсекторные игры», которые хранятся в загрузочном секторе, как вышеупомянутая BootOS.
- Эмулятор Intel 8080 (2000 символов).
- bootBASIC — язык BASIC в 512 байтах кода.
- Tinyasm — небольшой ассемблер для программ на 8086/8088, может работать на реальной машине PC XT. Для работы требуется не менее 128 КБ памяти. Оскар написал его для нескольких человек, которые играют в его бут-игры и хотят собрать их на реальной машине PC XT, однако упомянутый выше ассемблер nasm не работает на процессорах 8086/8088. Поэтому ничего не оставалось, как выделить три дня времени и написать свой ассемблер.
- TTRIS, первый тетрис для TRS-80 model 1.
- Nanochess (1255 символов) — самые маленькие шахматы на C. Это первая из программ Толедо, победивших на конкурсах IOCCС.
Исходный код на С
B,i,y,u,b,I[411],*G=I,x=10,z=15,M=1e4;X(w,c,h,e,S,s){int t,o,L,E,d,O=e,N=-M*M,K =78-h<<x,p,*g,n,*m,A,q,r,C,J,a=y?-x:x;y^=8;G++;d=w||s&&s>=h&&v 0,0)>M;do{_ o=I[ p=O]){q=o&z^y _ q<7){A=q--&2?8:4;C=o-9&z?q["& .$ "]:42;do{r=I[p+=C[l]-64]_!w|p ==w){g=q|p+a-S?0:I+S _!r&(q|A<3||g)||(r+1&z^y)>9&&q|A>2){_ m=!(r-2&7))P G[1]=O, K;J=n=o&z;E=I[p-a]&z;t=q|E-7?n:(n+=2,6^y);Z n<=t){L=r?l[r&7]*9-189-h-q:0 _ s)L +=(1-q?l[p/x+5]-l[O/x+5]+l[p%x+6]*-~!q-l[O%x+6]+o/16*8:!!m*9)+(q?0:!(I[p-1]^n)+ !(I[p+1]^n)+l[n&7]*9-386+!!g*99+(A<2))+!(E^y^9)_ s>h||1<s&s==h&&L>z|d){p[I]=n,O [I]=m?*g=*m,*m=0:g?*g=0:0;L-=X(s>h|d?0:p,L-N,h+1,G[1],J=q|A>1?0:p,s)_!(h||s-1|B -O|i-n|p-b|L<-M))P y^=8,u=J;J=q-1|A<7||m||!s|d|r|o<z||v 0,0)>M;O[I]=o;p[I]=r;m? *m=*g,*g=0:g?*g=9^y:0;}_ L>N){*G=O _ s>1){_ h&&c-L<0)P L _!h)i=n,B=O,b=p;}N=L;} n+=J||(g=I+p,m=p<O?g-3:g+2,*m<z|m[O-p]||I[p+=p-O]);}}}}Z!r&q>2||(p=O,q|A>2|o>z& !r&&++C*--A));}}}Z++O>98?O=20:e-O);P N+M*M&&N>-K+1924|d?N:0;}main(){Z++B<121)*G ++=B/x%x<2|B%x<2?7:B/x&4?0:*l++&31;Z B=19){Z B++<99)putchar(B%x?l[B[I]|16]:x)_ x-(B=F)){i=I[B+=(x-F)*x]&z;b=F;b+=(x-F)*x;Z x-(*G=F))i=*G^8^y;}else v u,5);v u, 1);}}
Это полноценный шахматный движок, с которыми можно поиграть, причём он может у вас выиграть (шутка, наверняка он знает только правила и выбирает ходы без просчёта позиции на несколько ходов вперёд, то есть почти случайно — просто умеет двигать все фигуры и делать рокировку, вряд ли в него зашиты хотя бы правильные дебюты).
Шахматы в 1 КБ JS — аналогичная разработка, только на JavaScript, заняла второе место на конкурсе JS1K.
Исходный код JSfor(B=i=y=u=b=i=5-5,x=10,I=[],l=[];B++<304;I[B-1]=B%x?B/x%x<2|B%x<2?7: B/x&4?0:l[i++]="ECDFBDCEAAAAAAAAIIIIIIIIMKLNJLKM@G@TSb~?A6J57IKJT576,+ -48HLSUmgukgg OJNMLK IDHGFE".charCodeAt(y++)-64:7);function X(c,h,e,s ){c^=8;for(var o,S,C,A,R,T,G,d=e&&X(c,0)>1e4,n,N=-1e8,O=20,K=78-h<<9;+ +O<99;)if((o=I[T=O])&&(G=o^c)<7){A=G--&2?8:4;C=o-9?l[61+G]:49;do if(!( R=I[T+=l[C]])&&!!G|A<3||(R+1^c)>9&&G|A>2){if(!(R-2&7))return K;n=G|(c? T>29:T<91)?o:6^c;S=(R&&l[R&7|32]*2-h-G)+(n-o?110:!G&&(A<2)+1);if(e>h|| 1<e&e==h&&S>2|d){I[T]=n;I[O]=0;S-=X(c,h+1,e,S-N);if(!(h||e-1|B-O|T-b|S <-1e4))return W(),c&&setTimeout("X(8,0,2),X(8,0,1)",75);I[O]=o;I[T]=R} if(S>N||!h&S==N&&Math.random()<.5)if(N=S,e>1)if(h?s-S<0:(B=O,b=T,0)) break}while(!R&G>2||(T=O,(G||A>2|(c?O>78:O<41)&!R)&&++C*--A))}return-K +768<N|d&&N}function W(){i="<table>";for(u=18;u<99;document.body.innerHTML= i+=++u%x-9?"<th width=60 height=60 onclick='I[b="+u+"]>8?W():X(0,0,1)' style='font-size:50px'bgcolor=#"+(u-B?u*.9&1||9:"d")+"0f0e0>"+(I[u]?98 08+l[67+I[u]]:160):u++&&"<tr>")B=b}W()
Ещё он написал книжку, где опубликован исходный код Nanochess с комментариями (версии на C и JS). 182 страницы (то есть код JS или C требует объяснения примерно на 90 страниц, и в это даже верится). Есть у него ещё книжки по играм и BootOS.
Выпускать необфусцированный код своих программ Оскар не планирует, потому что это «лишит многих людей острых ощущений и обучения в ходе самостоятельной разфусцировки». Что касается ретроигр, там код не опубликован, чтобы не мешать продаже картриджей. Вот когда все картриджи продадут, тогда можно, говорит он.
▍ Семья Толедо
А теперь самое интересное — кто такой Оскар Толедо. Дело в том, что это не обычный человек, как мы с вами, а представитель мексиканской династии Толедо, которая c 1950-х годов проектирует и собирает собственные компьютеры и другие приборы под заказ. Например, металлоискатели, ионизаторы для очистки воды и воздуха, детекторы радиоизлучения (для обнаружения мобильных телефонов), электрокардиографы, учебный компьютер, различные одноплатники с оригинальной ОС и своим ассемблером:
Учебный компьютер:
Детектор электромагнитного поля (датчик на основе эффекта Холла):
На первый взгляд все эти приборы похожи на какие-то шарлатанские лженаучные подделки, вроде фильтров Петрика.
Это ещё не всё. Кроме проектирования и сборки всех этих изделий, семья Толедо пишет собственные операционные системы, браузеры и другой софт. Они десятилетиями делали это втайне от всех, не выкладывая результаты своей работы в открытый доступ. В каком-то смысле эта организация похожа на тайное общество типа масонов или иезуитов, которые скрывали результаты своих научных и инженерных открытий, передавая их только «посвящённым».
Оскар Толедо и его выдающиеся родственники живут на окраине Мехико и до последнего времени не пользовались интернетом, поэтому информация об их работе распространялась только как слухи и легенды, в которые мало кто верил. Статьи о них писали разве что в жёлтой мексиканской прессе. Они и сами не стремились к публичности — и так никогда не опубликовали исходный код своей операционной системы Fenix, браузера Navegador Biyubi и других разработок.
В общем, в эту историю было трудно поверить. Казалось, что это преувеличенные сказки от журналистов, которые не разбираются в технологиях и которых легко ввести в заблуждение и выдать какой-нибудь кустарный прибор за настоящее чудо техники. Но всё изменилось несколько лет назад, когда Оскар Толедо-младший, сын основателя компании (тоже Оскар Толедо), победил в конкурсе IOCCC со своей программой Nanochess.
А потом победил ещё четыре раза. Его очевидные достижения наконец-то прояснили, кто же его родственники: гениальные хакеры и инженеры — или просто аферисты. Стало очевидно, что по крайней мере Толедо-младший — действительно перворазрядный хакер (в первоначальном смысле этого слова, конечно). И возможно, ему можно верить в том, что он говорит в отношении своих родственников. Если это правда, то это действительно удивительное семейство, даже если они не хотят публиковать свой код для публичного обсуждения.
Исходный код отсутствует для всех программ семьи. Есть только скриншоты с их сайта, и остаётся верить им на слово (они никогда не стремились к публичности, это часть семейного кодекса и, честно говоря, нет особого смысла им подделывать кучу картинок).
Браузер Biyubi в операционной системе Felix образца 1990-х
Название браузера произносится как «би-ю-би», что по-сапотекски означает «Ищи, пока не найдёшь».
Цивилизация сапотеков существовала с 700 года до н. э. по 1521 год, то есть 2200 лет
Из преимуществ ОС Fenix называется загрузка за четыре секунды, изменение разрешения экрана или цвета окон в один клик, полностью графическое управление системой (например, через телевизор), возможность выключения компьютера в любой момент без выхода из ОС, полное отсутствие багов.
На следующих скриншотах показано различное прикладное ПО в операционной системе Fenix. А оно включает криптографический пакет, графический редактор, мультимедиа-плеер, IDE для разработчиков и многое другое: в общей сложности 41 программа плюс десяток игр. Сложно поверить, что всё это написано с нуля. Наверное, адаптирован какой-то опенсорсный софт под Linux (возможно, даже в нарушение лицензии, что объясняет факт сокрытия исходников Fenix и ПО).
Различный нативный софт для операционной системы Felix (естественно, тоже написанный ими)
В общем, это или какая-то семья волшебников, или чрезвычайно изощрённая афера, которая включает обучение программированию ребёнка с пяти лет.
Автор: Анатолий Ализар