LINUX.ORG.RU

Можно ли собрать Линукс совсем с нуля?

 


2

1

Лфс требует gcc и вообще toolchain, а если нырнуть глубже, и собрать gcc старым gcc, его ещё более старым, и так до 1.27 (первая версия на x86). А дальше? Дальше мы возьмём какой-нибудь K&R компилятор, да? А его как собрать? На самом дне, наверное, будет какой-то минимальный ассемблер, набранный вручную в кодах? Но его надо будет запустить на какой-то примитивной ос. Dos 1.0? Minix?

Хардмод - сделать всё это, не пользуясь несвободными инструментами.

Не знаю, какие теги ставить, и вообще не лучше ли перенести в development.

Ответ на: комментарий от anonymous

И это тоже.

И чтобы посмотреть, какие изменения в библиотеках появились за столько лет – сколько новых зависимостей и в чем их функции.

wandrien ★★
()
Последнее исправление: wandrien (всего исправлений: 1)

Если у тебя уже есть то в чём можно написать язык, на кором можно написать язык который сможет собрать ядро то проблем нет, это будет очень долго, но реально. А вот если у тебя ну допустим ПК, флешка/диск с исходниками ядра, а из рабочей программы только BIOS на этом ПК то ты попал =)) Но вот это и будет совсем с нуля =).

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от wandrien

То ли дело раньше, да, когда в дефолтную ПЗУ входили

Аряя что в венду дерьма понапихано на 20гб? Что за дерьмо производители предустанавливают на ноутбуки???11

anonymous
()
Ответ на: комментарий от wandrien

Lua + tcc статически вместе связать и всё, можно в Lua REPL будет писать

>tcc = require('tcc')
>tcc.run [[ любой C код ... return 42 ]]
>print(tcc.exit_status)
>42
>--или в защищённом режиме (и проца и lua)
>handler,err = pcall(tcc.run,[[любой C код ... return 42/0]])
>>if err then
>>   print('O_o?\n'..err)
>>else
>>   handler()
>>   print(tcc.exit_status)
>>end
>O_o
>protected call:6 tcc:1: Division by zero, you are predurok?
LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от wandrien

Там к слову в TCC голосование за переход с LGPL на MIT не случилось в колуарах? Вроде 1 голос оставался и всё. Или на двойную лицензию чтоль хотели не помню точно. Где то слышал что уже случилось просто пока не объявили. Но это не точно. Хотя плохо что на MIT лучше на Zlib раз уж так.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от wandrien

не пустят пользователя в такие низовые функциональности. ато он возьмет и чтонибудь сделает обязательно незаконное типа нарушении лицензии на аппаратное железо.
помнится бмв даже подогрев сидений включало за денюжку.

pfg ★★★★★
()
Ответ на: комментарий от wandrien

В старом браузере можно открыть 6-7 страниц, и общее потребление системы не превышает 250 МБ.
Какие-то фантастические технологии.

К этому ещё можно вспомнить «загадку мобильника». Почему-то Хром на телефонах с 2-4 гигами памяти летает, а такой же (вроде бы) Хром на десктопе с таким же объёмом памяти страшно тормозит… Вроде бы вся разница, что первый собран под ARM, а второй под x86_64…

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

Не знаю, как хром, давно последний раз проверял, но огнелис на десктопе с 2 гигами летает точно ничуть не хуже, чем хром на телефонах с 4 гигами.

Сдаётся мне, что хром тоже, если честно.

Ну это если там нет сотен вкладок, конечно.

CrX ★★★★★
()
Ответ на: комментарий от hobbit
  1. Может у тебя DE? Я у меня там Awesome.

Ещё такой момент: профиль, случаем, не скопирован с другой системы, где много рамы? Я так понимаю, браузеры подстраивают многие свои параметры под то, сколько рамы они обнаружили на компе. Возможно (я не уверен), это даже где-то сохраняется.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 1)
Ответ на: комментарий от pfg

Ассемблер в машинных кодах может уложиться в несколько килобайт, особенно если ограничиваться поддержкой базовых инструкций без всяких MMX, SSE и прочих.

Компилятор какого-нибудь C89 без поддержки оптимизаций уложится в несколько десятков килобайт машинного кода (но нам не надо писать его в машинных кодах, у нас уже есть Assember).

С этого момента мы уже можем скомпилировать им какой-нибудь нормальный уже существующий OpenSource компилятор C, получив оптимизации и полную поддержку стандарта.

Затем этим компилятором мы компилируем какой-нибудь CFront или аналог - транслятор из C++ в C.

И вот у нас уже есть и C, и C++. Дальше мы компилируем GCC, вероятно, в несколько итераций (так как чем новее GCC, тем новее стандарт C++ ему нужен). И вот у нас полноценный тулчейн, которым можно собирать любой современный софт.

KivApple ★★★★★
()
Ответ на: комментарий от CrX

Я когда-то давно заморочился и в конфиг firefox внёс какие-то правки, урезающие потребление CPU кодом на JS. Не знаю, действуют ли еще эти настройки, или уже поизменялись все, но в сеансе сейчас около 30 окон браузера, и потребление CPU минимальное.

Однако нагрузка на память и IO у браузера всё равно конская на фоне старых версий. Пользоваться этим без пытки можно только на SSD. На HDD запуск браузера – это звиздец.

wandrien ★★
()
Последнее исправление: wandrien (всего исправлений: 1)
Ответ на: комментарий от wandrien

Кстати, если проблемы именно из-за RAM и слишком большого количества вкладок, то в качестве компромисса можно заюзать расширение, выгружающее неактивные вкладки после определённого времени их висения в фоне. Да, это не всегда то, что хочется, но если альтернатива — какие-то лютые тормоза, то это выход.

А ещё на about:memory есть кнопочка Minimize Memory Usage, и она действительно работает. Я не знаю, что там «течёт» такого, и почему эту минимизацию браузер не может сам производить с какой-то периодичностью, но по моим наблюдениям, ничего плохого она не делает, а использование памяти действительно снижает, если браузер до этого использовался долгое время.

CrX ★★★★★
()
Ответ на: комментарий от CrX

Я ранее пользовался расширением OneTab, которое одним нажатием отправляло все вкладки текущего окна в список ссылок на отдельной странице.

Но как-то постепенно вопрос решился сам собой, памяти браузер жрёт много, но не так чтоб прям запредельно много. На машине с 16 ГБ ОЗУ. Главное, что после настроек бюджета фоновых вкладок он не жрёт CPU и не гудит кулером.

А на машине с 3 ГБ ОЗУ я просто вручную закрываю все ненужные вкладки сразу. Там вообще по-другому ощущаются вычислительные ресурсы, их только впритык хватает.

wandrien ★★
()
Последнее исправление: wandrien (всего исправлений: 1)

Нельзя. Это очень похоже на генетику - там далают генно-модифицированные бактерии чтобы производить какой-нибудь реактив для производства дальнейших генных модификаций. Процесс длительный и требующий времени и упорного труда. И вот так с нуля ты не сделаешь ничего - выбора два - потратить годы или купить стартовый комплект у тех кто это сделал.

Так что вот у меня есть голое железо без ОС и я хочу собрать и поставить линукс из исходников - потребует и железных усилий чтобы вбивать машинный код в файловую систему напрямую, и программных - чтобы нечто изначальное в этих бинарных кодах написать.

Qui-Gon ★★★★★
()

Лфс требует gcc и вообще toolchain, а если нырнуть глубже, и собрать gcc старым gcc, его ещё более старым, и так до 1.27 (первая версия на x86).

Проблема, которую ты описываешь зовётся «раскрутка компиляторов». Посмотри какое-нибудь видео про compiler bootstraping на ютуб канале computerphile. Также почитай интерсную статью от Кена Томпсона «Reflections on trusting trust». А затем «Reflections on trusting trust revisited».

А дальше? Дальше мы возьмём какой-нибудь K&R компилятор, да? А его как собрать?

У популярного языка будут разные способы собрать один компилятор скорее всего.

https://bootstrappable.org/ — boostrappable builds, набор опенсорц проектов про раскрутку компиляторов.

На самом дне, наверное, будет какой-то минимальный ассемблер, набранный вручную в кодах?

hex0 и hex1, да.

Но если перийти по ссылке, которуя я выше привёл, то можно ещё и про mes узнать. Имплементацию схемы (вид лиспа), которая используется на одном из этапов раскрутки gcc. Насколько я понял выбор пал на схему в том случае из-за простоты стандарта RxRS

Но его надо будет запустить на какой-то примитивной ос. Dos 1.0? Minix?

Не обязательно. На всякий случай ещё добавлю, что существует термин «selfhosted», который относится к операционным системам, которые могут быть собраны из исходного кода компилятором запущенным на этой операционной системе.

Artsi0m
()
Ответ на: комментарий от wandrien

И? Это что - совсем с нуля?

Вот у тебя есть железка с голым биосом и сорсы линукса на флэшке. Что делать бум? Ни скачать немем. Ни скомпилять. Нет ничего.

А так то конечно - вот есть с ОС, броузерами, кросс=копилятором, кучей бинарных пакетов. Так любой дупак соберет.

Qui-Gon ★★★★★
()
Ответ на: комментарий от Qui-Gon

И? Это что - совсем с нуля?

Стремительно стремится к нулю. На данный момент предсобранного 357 байт + 25 МБайт.

token_polyak ★★★★★
()
Последнее исправление: token_polyak (всего исправлений: 3)

Если интересно что будет в самом-самом начале, я могу рассказать, возился когда-то с ретро железом. Там практически на бумаге пишется в машинном коде средство ввода программ в надежде что оно заработает сразу как надо. Это банальная оболочка позволяющая в указанные адреса писать шестнадцатеричные данные и передавать туда управление.

Уже с помощью этой оболочки пишется возможность хоть как-нибудь сохраниться на дискету, к примеру сливать туда целиком дамп всей памяти, прям тупо как в блочное устройство. Дальше можно изобрести файловую систему, написать простой компилятор ассемблера и другие примитивы ОС.

В твоей постановке вопроса есть множество, как бы так выразиться, изъянов наверное. Потому что в железке уже как минимум есть биос. И к сожалению этот биос ты сам модифицировать, как я расписал выше, не можешь. А значит и полноценно бутстрапнуть без дополнительного софта, исходников биоса и паяльника с программатором ничего нельзя. И поэтому лучше просто не страдать, и взять готовый собранный софт.

Там все эти стейджи при бутстрапе нужны не потому что готовый gcc какой-то базовый, фундаментальный и примитивный, а потому что gcc собранный в окружении твоей сборки уже немного другой и иначе настроен, а значит и результат сборки всех остальных пакетов будет другой и надо всё пересобрать уже твоим gcc, чтобы получилось как надо. Но для затравки нужно использовать любой сторонний gcc который ты можешь запустить.

neumond
()
Ответ на: комментарий от token_polyak

предсобранного 357 байт + 25 МБайт

357 байт это конечно хорошо, но 25Мбайт в каком-нибудь 1990 году это был жёсткий диск с тысячей программ. У меня борландовский, кажется, компилятор c++ влезал на две дискеты. А квикбейскик какой-нибудь занимал килобайты.

true_old
() автор топика
Ответ на: комментарий от true_old

В аббревиатуре BIOS внезапно есть буквы OS, которые именно то самое и означают. Ты сам заговорил о примитивных ОС, вот тебе самая примитивная ОС, поставляющаяся с современным железом. Всё остальное ты неизбежно приносишь извне: интернет, друзья, диск в переходе. А если можно сразу принести stage3 какой-нибудь генты и собрать всё по хэндбуку, то в чём достижение приносить что-то другое и собирать большим количеством шагов?

neumond
()
Ответ на: комментарий от neumond

в чём достижение приносить что-то другое и собирать большим количеством шагов?

Ты ещё спроси в чём достижение обновить DOS 5.0 до Windows 11. Хотя DOS обновлять неинтересно, там просто перезапись файлов. Ну хорошо, Windows 1.0 до Windows 11.

true_old
() автор топика
Ответ на: комментарий от teod0r

Оконфузился, извиняюсь. Во всяком случае смысл моего поста не потерялся, кажется что путаются стейджи бутстрапа операционки как это у генты/LFS и повторение исторического процесса.

neumond
()

Здравствуйте.

Лфс требует gcc и вообще toolchain, а если нырнуть глубже, и собрать gcc старым gcc, его ещё более старым, и так до 1.27 (первая версия на x86). А дальше? Дальше мы возьмём какой-нибудь K&R компилятор, да? А его как собрать? На самом дне, наверное, будет какой-то минимальный ассемблер, набранный вручную в кодах? Но его надо будет запустить на какой-то примитивной ос. Dos 1.0? Minix?

Пожалуйста, посетите психотерапевта для избежания больших проблем в будущем.

anonymous
()
Ответ на: комментарий от neumond

Одной - нет. Потому что старая винда не работает в 64бит, а новая не работает в 32бит. Но в vmware такое можно.

путаются стейджи бутстрапа операционки как это у генты/LFS и повторение исторического процесса

Скорее, попытка хакнуть исторический процесс. Исторически широко применялась кросс-компиляция, тот же masm был написан на паскале на z80, кажется. Тут скорее исследовательский проект, можно ли на одной машине, если иметь полный набор исходных текстов, воссоздать с нуля всю современную экосистему. Совсем с нуля нельзя, потому что в биосе нет бейсика (а если бы был, возник бы вопрос как он туда попал). Но что нужно записать на дискету минимально, чтобы вытащить себя за волосы? Если мы дойдём до минимального размера в единицы килобайт, возникнет следующий вопрос - можно ли собрать на коленке считыватель перфокарт, для com-порта например, и «записать» наш level0 на перфокарту? Можно ли на перфокарте записать драйвер для примитивного дисковода (и можно ли его создать, опять же, на коленке?). Короче говоря, можно ли ВЫТАЩИТЬ СЕБЯ ЗА ВОЛОСЫ. Зачем? Ну, например, для восстановления цивилизации после Фоллаута. Помнится, у Павла Дмитриева был роман «Ещё не поздно», где ГГ тоже считерил - попал в прошлое не то со смартфоном, не то с ноутбуком, не то с тем и другим. А если попасть в прошлое - или в доинформационный век, не обязательно в прошлом - ТОЛЬКО с информацией? Голышом?

true_old
() автор топика
Ответ на: комментарий от true_old

Если совсем с нуля без ПО, но при наличии хардвари, то надо спаять вот такую штуку и первый примитивный монитор-отладчик туда вбить вручную:

https://youtu.be/ZMesv13cHdw

wandrien ★★
()
Последнее исправление: wandrien (всего исправлений: 1)