LINUX.ORG.RU

Redox — операционная система, написанная на Rust

 ,


5

7

Redox — новая UNIX-подобная операционная система с открытым исходным кодом, написанная на Rust.

Основные особенности:

  • микроядерная архитектура;
  • основная часть кода написана на Rust;
  • имеется опционально включаемый GUI Orbital;
  • библиотека Newlib для программ на C (аналог glibc);
  • лицензия MIT;
  • драйверы работают в пространстве пользователя;
  • доступны распространенные команды UNIX;
  • поддержка ZFS (пока в разработке).

Скриншот

Образы для QEMU и VirtualBox, ISO с установщиком

>>> Подробности

Deleted

Проверено: JB ()
Последнее исправление: cetjs2 (всего исправлений: 14)
Ответ на: комментарий от anonymous

Ты даун? Справа видно, что они значат.

Это ты даун, что в остальном коде используется - константы или описания?

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

что в остальном коде используется - константы или описания?

А они используются?

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

Системные вызовы - это и будет базой для дров

Ты же вообще не разбираешься — зачем лезешь?

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

Низкий уровень - это не студенчесая курсовая на С, потому что преподаватель настоял.

И какая связь? Или ошибки только студенты допускают?

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

В расте не попытки оградить, а попытки изолировать «опасные места». И нет, я не согласен, что весь проект таким местом будет.

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

А до этого, по-твоему, какой был?

Как сейчас всё это куллязычке - паскалятскохацкельное. Я не уверен что именно хацкельное - может есть другой околохацкельный куллязычек из которого тырили.

В конечном итоге из сишки пришли только ключевые символы - я не знаю выпилил @ или нет, но скорее всего да.

Что первое, что второе?

Существование авто в си - это первое. Второе - это авто стало называться авто по той причине, что в си было авто.

Что ты хотел сказать таким примитивным юзкейзом?

Это не примитивный юзкейс, а пруфец того, что ты пробалаболил, ибо это основной юзкейс.

Давай массивы функций

Это не имеет смысла. Массивов функций не существует. Массивы указателей на функции как аргумент функции не имею смысла почти никогда.

А если так хочется char * (*m[])(char *, char *) - но в любом случае это не имеет смысла, ибо точно так же двойное определение минимум в списке инициализации. (char * (*[])(char *, char *)){append, append, append}

функции, возвращающие функции

Функций не может возвращать функцию - она может возвращать указатель, но это не имеет смысла. Тебе надо будет её куда-то присвоить - а это дублирование определения типа минимум - это не имеет смысла по умолчанию.

Это ничего более, чем балабольство.

Мне норм. Но я знаю Ъ-интырпрайзных сишников, которые плакались с указателей на функции и не знали, чем константный указатель отличается от указателя на константу.

Ну это не сишники, а лс-адепты.

Константы в сишке нужны только для борьбы с тупостью конпелятора - нигде больше не нужны.

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

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

Массив указателей на функцию определяется точно так же как и функция. Определение «как функция» - это тип-функция. Массив типов-функций определяется точно так же как массив чего угодно - просто поставь скобочки после имени. Как аргумент функции это преобразуется в любом случае в указатель.

Если тебе надо приписать звёздочку к имени - любой школьник догадается как и в чём проблема по умолчанию(вернее это не проблема).

Ну и:

typedef char * fun(char *, char *);

fun * fm[10];// - тебе всегда поможет. тут всё применяется к тайпдефу, собственно как и со скобочко-кастылями.
registrant27492
()
Ответ на: комментарий от matumba

Берём Windows Registry и превращаем его в «живой API». Все ветки регистри отвечают за какие-то модули системы, пример:

/HW
    /Sound
    /Storage
    /UserInput
        /Keyboard
        /Touch

Ты изобрёл Object Manager?

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

Расеянцы делают ось/дистр обычно для распила бюджетного добра бабла. Скажите честно, вам нужна «каръера» Альт Линукса?

Я сейчас не готов обсуждать эту тему.

Ой, ни ври, по глазам вижу хочешь ведь из бюджетной кормушки поклевать...

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

Что ты не можешь сделать на уровне как в сишке?

Всё. Хотя бы возможность писать компактный и читаемый код.

Нормальные ифы, запятая, нормальные типа и фичи сишного конпелятора, воид и нормальные касты. Свичи - всё операторы моча мочи.

Ничего в нём нет.

Каких возможностей из крестов тебе не хватает?

Всех. Хотя бы возможность(хотя с крестами это спорно) писать компактный и читаемый код.

Где шаблоны? Где перегрузка операторов? Да куда не глянь везде какая-то жопа вместо нормального синтаксиса. Где нормальный конпелятор?

Местами растовский safe даже безопасней жабовского, ибо форсит потокобезопасность.

Это идиотизм и этим раст может только подтереться, ибо это никому не нужно.

о растовский safe требует вложения времени программиста, в отличие от жабского. Ну, и надо следить за руками, когда юзаешь Rc.

Это не safe - safe - это всё то, что даёт тебе язык без твоих вложений. Руст это не safe, а чистое балабольство и обман обывателя.

Тупая подмена понятий рассчитанная на школьников и домохозяек.

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

Достаточно — если не ограничиваться только bare-metal гипервизорами, но и рассмотреть остальные хостовые системы виртуализации.

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

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

Ничего не будет. И я функции не писал - я писал аргументы. Ну на - пожри ={};

memory safety

Поподробней.

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

Для программного парсинга, в основном. Например, сишные типы не позволяют из говна и палок быстренько налабать парсер, чтобы парсить h-файлы из какого-нибудь sh-скрипта. Приходится писать полноценный парсер, без дураков.

Ну ладно там лиспы и паскалик - их авторы ничего сложнее хелворда написать не смогут.

Но в чём проблема в расте сделать нормальные типы?

Приходится писать полноценный парсер
из говна и палок

А потом он через жопу работает и всем срочно понадобились модули.

Но это не только не только типов касается, у Си вообще-то КЗ-грамматика, и наезд анонимуса конкретно на типы не понятен.

Скобочки надо ставить типа. Вчера за партой сказали. Правда в чём проблема, если не осиливаешь - заюзать тайпдеф - не сказали.

registrant27492
()

Шах и мат всем ЛОРовским rooster-ам:

Если Rust такой безопасный и надёжный, то почему ОС делают микроядерной?

anonymous
()
Ответ на: Шах и мат всем ЛОРовским rooster-ам: от anonymous

Если Rust такой безопасный и надёжный, то почему ОС делают микроядерной?

* Нуу я слышал, что ракета упала сотф для неё пишется на Обероне. Ошибка программиста. Оберон самый «безопасный язык», безопаснее чем Жаба и Раст.
* На 2016 год количество строк в исходном коде обычного ОС превышает отметку в один миллион. Можно код «драйверов» и утилит поделить на модули. А можно спроектировать современный и эффективный «дизайн» ОСи. Такой дизайн или архитектура являет собой архи-архи безопасный объёкт. Проектирование микроядерной архитектуры сложное дело, например, такой практик как Линус критически отностится к микроядрам.

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

MS DOS

Ага было дело мечтал запустить дос и написать свой синтезатор в обработчике прерывания. А потом купил карту maudio audiophile и необходимость в некрофилии отпала.

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

Нуу я слышал, что ракета упала сотф для неё пишется на Обероне. Ошибка программиста. Оберон самый «безопасный язык», безопаснее чем Жаба и Раст.

Никого, кроме балаболов, безопасность не интересует. Ибо основная проблема логические ошибки. Заваять безопасность уровня жабки, а уж уровня руста - ничего не стоит. Очередная подмена понятий.

На 2016 год количество строк в исходном коде обычного ОС превышает отметку в один миллион.

Балабольство. Опять же, убогое вранье и передергивание. 99% из этих строк - это драйвера для всего на свете. При этом как мы знаем любой куллязыке на порядок компактнее си, поэтому это не миллион, а 100к.

КуллОС на расте поддерживает через жопу х86 виртуалку, а линукс 100500 реальных платформ. НедоОС на расте работает через жопу и вообще не работает - линукс работает на 100500 платформ.

Такой дизайн или архитектура являет собой архи-архи безопасный объёкт.

Ничем микроядерна и не микроядерная ОС не отличаются. Выкини всё, чего нетв микроядре из линукса - будет тебе микроядро.

Проектирование микроядерной архитектуры сложное дело, например, такой практик как Линус критически отностится к микроядрам.

Не сложное, а бесполезное. Ни одно проекта «микроядерной архитектуры» в мире не существует.

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

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

Ой, ни ври, по глазам вижу хочешь ведь из бюджетной кормушки поклевать...

Как бы тебе ответить, чтобы ты понял один раз и навсегда? Вот смотри - можно с протянутой рукой обивать пороги министерств, а другой рукой бить себя в грудь и кричать: «Посмотрите, что вам принёс!!!».

Но есть и другие способы. Представь что в 1995 году кто-то принёс бы Slackware в «Министерство Связи» и сказал бы что вот она, будущая «российская ОС». Смешно? Между тем, сейчас никто не смеётся, когда Alt Linux называют российской ОС. Задумайся, почему так поменялось мировоззрение чиновников и народа.

А насчёт «кормушки». Ты знаешь как это работает? Тебе дадут горстку, остальное съедят сами, а «наверху» отчитаются что хорошо тебя покормили. Такая кормушка нам не нужна.

Надеюсь, теперь ты всё понял.

alman ★★★
()

Заканчивайте с нацполом.

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

matumba предлагает интроспекцию интерфейсов драверов. Где она в Object Manager?

Драйвер себя регистрирует где надо.

Ну окей.

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

Одна из фич - безопасность работы с памятью без GC. И где это по твоему нужно, если не на низком уровне?

Очевидно, что как раз на низком уровне оно и не нужно.

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

1. Язык системного программирования должен быть максимально простым. Это касается и синтаксиса, и того, что происходит behind the scene - программист должен понимать, во что превратится код на уровне машины и что ожидать от оптимизирующего компилятора. И в первом, и во втором Rust, очевидно, проигрывает C. 2. Язык системного программирования должен быть максимально свободным. Программист без дополнительных усилий должен иметь возможность сделать всё, что разрешено архитектурой.

И еще один камень в огород. Опыт паскаля (оберона), по ходу, ничему не научил разработчиков раста. Те же грабли. Много пафоса - весь информационный поток, связанный с языком, так или иначе построен на противопоставлении, уничижении конкурентов, противно даже, вспоминаются едкие публикации дедушки Вирта. Вот теперь прототип собственной ОС - ничего не напоминает?

Пусть бы жил себе спокойно, занял свою небольшую нишу. В middleware или прикладухе. Но лезть на системный уровень? С этим? Прогноз: как самостоятельный язык, не взлетит, оставаясь уделом небольшого процента фанатов или вовлеченных компаний. Кроме того, стоит рассматривать Rust как экспериментальный язык, удачные идеи постепенно будут позаимствованы в новых версиях стандартов C/C++.

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

Одна из фич - безопасность работы с памятью без GC. И где это по твоему нужно, если не на низком уровне?

Наверное потому в ObjC выкинули GC, и не впилили его в Swift.

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

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

И я даже знаю одного такого разработчика. ХЗ что он разрабатывает, но он точно не клинический идиот. Известен под кличкой «Царь».

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

Не напоминает. Просто для протокола: разработчики Rust не имеют никакого отношения к Redox и до отвращения политкорректны в отзывах о других языках.

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

и соответственно, безопасное, если программист не клинический идиот и прилежно изучал архитектуру компьютера

Весь существующий код на С показывает обратное.

Это касается и синтаксиса, и того, что происходит behind the scene - программист должен понимать, во что превратится код на уровне машины и что ожидать от оптимизирующего компилятора.

Ты недооцениваешь оптимизирующие компиляторы С.

quantum-troll ★★★★★
()
Ответ на: комментарий от tailgunner

Reference counting - это форма GC.

Да, если подразумевать сборку мусора, и нет, если подразумевать отдельный сборщик мусора.

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

Кстати:

<anon>:8:38: 8:39 error: use of possibly uninitialized variable: `a` [E0381]
<anon>:8     println!("{}", mem::size_of_val(&a));
                                              ^
<std macros>:2:25: 2:56 note: in this expansion of format_args!
<std macros>:3:1: 3:54 note: in this expansion of print! (defined in <std macros>)
<anon>:8:5: 8:42 note: in this expansion of println! (defined in <std macros>)
<anon>:8:38: 8:39 help: see the detailed explanation for E0381
error: aborting due to previous error
playpen: application terminated with error code 101

Compilation failed.
anonymous
()
Ответ на: комментарий от Quasar

Домохозяйки будут пилить драйверы?

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

массивы функций? не имеет смысла

функции, возвращающие функции? не имеет смысла

Царь, ты ходячая иллюстрацию blub парадокса. Впрочем, для эмбедщика это норма (как и зашкаливающее ЧСВ).

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

Пользователь не станет менять машину ради ваших тормозов.

Первый раз вижу человека, НАСТОЛЬКО незнакомого с компьютерными реалиями последних тридцати лет :) Пользователи только и делают, что постоянно меняют машину из-за программных тормозов. А то бы до сих пор на ZX-Spectrum и БК-0010 сидели бы :D

Посмотрел, не увидел, чтобы гугл хоть раз убил проект, непосредственно приносящий прибыль

Я писал про забивание на нужды части клиентов. Это, как бы, несколько совсем иное.

Не увидел связи

Да, я уже понял.

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

А с ними-то что не так?

Всё. Уже от одного отсутствия скобочек тянет блювать. Я уж не говорю а том, что скорее всего там и присваивать нельзя и запятой нету.

Вообще-то, она имеется.

Где? Тонны каких-то неведовых портянок? Для всех операторов?

От одного as в любой строчке - я уже проблевался. Это такой unsafe, что я должен какой-то хернёй страдать 24/7?

Да и у меня алергия на паскалятинку.

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

Очевидно, что как раз на низком уровне оно и не нужно.

Как скажешь.

весь информационный поток, связанный с языком, так или иначе построен на противопоставлении, уничижении конкурентов

Где ты такое нашёл?

Вот теперь прототип собственной ОС - ничего не напоминает?

Нет.

И ничего, что этот прототип - самостоятельный проект и не продвигается разработчиками языка?

удачные идеи постепенно будут позаимствованы в новых версиях стандартов C

Вот это очень вряд ли.

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

Наверное потому в ObjC выкинули GC, и не впилили его в Swift.

В расте не обмазывают всё подряд указателями со счётчиком ссылок.

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

Я уж не говорю а том, что скорее всего там и присваивать нельзя и запятой нету.

Вот тебе и скобочки, и присваивание: http://is.gd/PlYXkD

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

quantum-troll ★★★★★
()
Ответ на: комментарий от quantum-troll
let foo = 10;
    if {foo = 5; foo == 5} {
        println!("Hello, world!");
    }

И уже обделалось.

что такое генерики и кодогенерация

Зачем ты мне это пастил? Зачем ты спастил мне мою пастут дописав к ней это?

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

вот была бы у Linux такая, производители бы не стали клепать закрытые неперепрошиваемые железки.

По-моему, неперепрошиваемые железки в большинстве случаев потому что производителю это не нужно.

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

Уже от одного отсутствия скобочек тянет блювать.

Уровень объективности потрясает. Для присваивания есть if let. Покажи пример где без запятой в if обойтись нельзя.

Для всех операторов?

https://doc.rust-lang.org/std/ops/index.html

От одного as в любой строчке - я уже проблевался. Это такой unsafe, что я должен какой-то хернёй страдать 24/7?

Какое это отношение имеет к операторам?

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

Как сейчас всё это куллязычке - паскалятскохацкельное.

Всё, что было от Си - было изначально. А выпиливалась всякая перловка для обозначения смартпойнтеров.

это основной юзкейс

Расскажи это сишным ваятелям ООП на коленке.

Массивы указателей на функции как аргумент функции

Где я говорил за массивы как аргумент?

Функций не может возвращать функцию

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

лс-адепты

Расшифруй.

Константы в сишке нужны только для борьбы с тупостью конпелятора

Я всю жизнь пользовался, чтобы отличать входные аргументы от выходных. Впрочем, жду твоего юзкейза, люблю борьбу с тупостью.

Хотя «массивы функций» уже показательно

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

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

Скобочки надо расставить в правильном порядке, да ещё и завернуть в другие скобочки в нужном месте.

typedef

Тайпдефить тип, используемый в одном месте? Костыль.

Проблема в итоге решается либо костылём с тайпдефом, либо

скобочко-кастылями

Вся суть сишки.

Всё. Хотя бы возможность писать компактный и читаемый код.

Сначала ты говорил за уровень, когда попросили уточнить - заговорил за синтаксис. Слив засчитан.

Где шаблоны? Где перегрузка операторов?

Есть. Не веришь?

какая-то жопа вместо нормального синтаксиса

Вкусовщина. Олсо, смешно звучит в контексте сравнения с крестами.

никому не нужно

Пруф.

Это не safe - safe - это всё то, что даёт тебе язык без твоих вложений.

Пруф существования твоего определения не только в твоей голове, или это чистая демагогия и подмена понятий.

И я функции не писал - я писал аргументы.

Не виляй. Пастишь всякий кал - отвечай за него, или заранее говори, что не отвечаешь.

Поподробней.

Растовский компилер тебе не дал бы заюзать неинициализированную переменную в безопасном коде.

Ибо основная проблема логические ошибки

Которые в большинстве случаев стабильно проявляются, легко повторяются и фиксятся через отладочный вывод/код ревью. В отличие от UB, косяков многопоточности и сегфолтов, которые проявляются исключительно при полной луне, когда Марс в созвездии стрельца, повторяются через задний проход и фиксятся через обмазывание стектрейсами и содомию с дебаггером.

Никого, кроме балаболов, безопасность не интересует.

Где неубиваемая TsarOS?

Ты мне покажешь массив функций

void (*states[])(void) = {ololoState, azazaState};

while (true) { states[currentState](); }

Можно, коннечно, и через switch, но как-то boilerplate.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.