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)
Ответ на: комментарий от segfault

то покажи как просто можно передать через rust-овую ссылку NULL?

Через Option<&T>, очевидно же.

Мне только «println», да «fn» перед функциями хватило, чтоб понять чем вдохновлялись авторы.

В основном окамлом, с++ и cyclone.

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

Вы так рассуждаете, будто моя (абстрактная) система существует уже сто лет и в ней всё криво и тут вылилась проблема - есть два АПИ! Нет никакой ложки, понимаете?

Будет, после первого же «очень-очень нужного» обратно-несовместимого изменения.

Например: было HW/Network/Eth, эту ветвь оставляем и создаём HW/Network/Ethernet под ВСЕ новые дрова. Кто захочет - обновит дрова и они (разные lib) будут висеть в разных ветках.

Я вот смотрю в каталог /lib и не понимаю, в чем новизна вашего предложения.

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

Ага, верим. Всей душой.

Мне интересна не мышиная возня в крошках, а сам хлеб - взлетит система с динамическим АПИ а-ля регистри?

— Давайте модули линковать не по имени файла, а по записи в реестре.
— А какая нахрен разница?
— Аааа... Ээээ... Ыыы... Нууу...

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

Хм, ну желаю успеха!

Хоть это и ЛОРчик )))

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

Единственное, что в ней хорошего (подразумевается) - вместо фиксированного набора read/write/ioctl драйвер получает приличный RPC. Всё.

Мне это напомнило одну идею, которую я как-то обдумывал от нехрен делать.

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

Всё остальное взаимодействие между компонентами системы (как между процессами, так и между процессом и драйверами) происходит как RPC а ля «вызываю такой-то метод для такого-то дескриптора».

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

Deleted
()

драйверы работают в пространстве пользователя;

А как там реализовано переключение, чтобы не влияло на проиводительность?

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

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

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

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

Ты изобрел микроядро %)

На самом деле, стандартизированный RPC был бы полезен и в обычной ОС - драйверам железа, управление котороым плохо ложится на read/write, вечно приходится изобретать свой говноRPC над ioctl.

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

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

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

На самом деле, стандартизированный RPC был бы полезен и в обычной ОС

нахер он нужен ?

говноRPC над ioctl

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

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

Ты изобрел микроядро %)

Нее, я изобрёл микроядро с dbus-ом или dcop... %)

Цимес был в том, чтобы формализовано описывать, что в передаваемых параметрах методов является дескрипторами, областями памяти, а что просто числами. А то вечно заход солнца вручную в обработке сисколов.

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

На самом деле, стандартизированный RPC был бы полезен и в обычной ОС

нахер он нужен ?

Если ты этого до сих пор не понимаешь... ничего, не расстраивайся.

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

Если ты этого до сих пор не понимаешь...

опять всезнайку включил - в очередной раз обсрешься же. Поясни - каким стандартным RPC заменить например v4l2 API

http://linuxtv.org/downloads/v4l-dvb-apis

и самое главное - что тебе это даст

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

опять всезнайку включил

Не-а. Просто если персонаж считает, что ручной дроч структурок в ioctl - это круто и лучше ничего быть не может, то и хрен с ним.

Поясни - каким стандартным RPC заменить например v4l2 API

IIOP, конечно же. Специально для тебя.

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

Цимес был в том, чтобы формализовано описывать, что в передаваемых параметрах методов является дескрипторами, областями памяти, а что просто числами

ЕМНИП, в Mach это было.

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

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

мне лично пох что ты считаешь - ты похоже вообще далекий пацанчик и про врапперы не слыхал

http://linuxtv.org/downloads/v4l-dvb-apis/libv4l.html

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

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

мне лично пох что ты считаешь

Вообще-то речь шла о том, что считаешь, но пох так пох.

про врапперы не слыхал

Врапперы с v4l1 на v4l2? Мде. Походу ты вообще не понял, о чем речь.

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

Врапперы с v4l1 на v4l2?

для любого API ядра есть врапперы - libv4l2, libdrm, alsa-lib, bluez - дохера их

Походу ты вообще не понял, о чем речь.

ты сам то понял что там напердел про RPC ?

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

не считай чужие бабки

Мне вот тоже интересно было бы узнать, если в Redox кто-то вкладывается.

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

А как же фигурные скобки, звёздочки, угловые скобки, амперсанды и прочая дрянь?

Фигурные скобки есть в каждом втором языке, начиная с С и заканчивая PHP. Звездочки и амперсанды - в каждом первом. А вот треугольных скобок в С нет.

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

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

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

А ты тип функции по ее сигнатуре узнаешь? Круто. Но скилл телепатии прокачан не у всех, поэтому умные люди придумали typedef.

Окей. Тогда и в С++ ссылка эквивалентна паскалевскому var. Скажешь, труп страуса тоже увлекался заимствованием из Паскаля?

Не знаю, но вполне возможно.

...оно отличается от printf, ибо синтаксис форматирования не сишный...

Какой такой сишный синтаксис? У printf он еще с фортрана не менялся. А тут предлагается какой-то новый, с автоопределением типа, но, увы, без предшествующих нулей/пробелов.

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

В отличие от своих оппонентов, ЛОРовские аналитики в курсе, что ключевое слово auto стали использовать для этих целей потому, что оно уже было зарезервировано в Си в тыща девятьсот лохматом году, чтобы обозначать размещение переменных на стекэ (в противоположность слову register), но не использовалось в C++ от слова совсем, вот и пихнули свободное относительно подходящее по смыслу ключевое слово.

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

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

Через Option<&T>, очевидно же.

Это уже другой тип.

В основном окамлом, с++ и cyclone.

Возможно. Я на знакомство со всеми языками не претендую. Но лично мне rust напомнил паскаль, при том что я уже 5 лет как пишу на С. А анонимус мне тут заливает, что у rust - это замена С.

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

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

printf

Кроме `println!` в расте есть ещё и `print!`.

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

Это уже другой тип.

Само собой, так как того требует null safety. Но размером этот тип как раз с указатель: https://doc.rust-lang.org/std/option/#options-and-pointers-nullable-pointers

А анонимус мне тут заливает, что у rust - это замена С.

Раст пригоден как замена С, но это не значит родство.

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

Раст пригоден как замена С

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

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

Rust - язык высокого уровня

Он язык такого уровня, который требуется. Хочешь писать низкоуровнево — пиши низкоуровнево. И наоборот.
Разве что GOTO в языке нет.

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

Он язык такого уровня, который требуется. Хочешь писать низкоуровнево — пиши низкоуровнево.

Я и не спорю что можно. Люди вот даже ОС на нем сделали. Однако, я не вижу в rust каких-либо киллер фич для этой сферы применения.

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

Какой такой сишный синтаксис? У printf он еще с фортрана не менялся. А тут предлагается какой-то новый, с автоопределением типа, но, увы, без предшествующих нулей/пробелов.

Ты про это?

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

Ну ок, вроде, все возможности printf повторили.

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

Эм... Логикой и здравым смыслом?

Поэтому 100500 раз синтаксис меняли и в конечном итоге пришли к сишному? Ну как сишному - хацкелопаскалятинка с сишным синтаксисом.

Ну синтаксис имеет ввиду типа символы/ключевые слова - вся фигня.

В отличие от своих оппонентов, ЛОРовские аналитики в курсе, что ключевое слово auto стали использовать для этих целей потому, что оно уже было зарезервировано в Си в тыща девятьсот лохматом году, чтобы обозначать размещение переменных на стекэ (в противоположность слову register), но не использовалось в C++ от слова совсем, вот и пихнули свободное относительно подходящее по смыслу ключевое слово. Так что просто повезло, а то сделали бы какой-нибудь __var, и было бы ещё веселее. Олсо, оппонентам лоровких аналитиков пора бы уже вырасти из аргументов ad hominem.

На каком основании из первого следует второе? Только потому, что ты так захотел?

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

char * append(char * str, char * new) {
  return strcat(str, new);
}

int kokoko(int _fprintf(FILE *, const char *, ...), char * ya(char *, char *), char * lamerok(char *, char *), char * balabol(char *, char *)) {
  char str[100500];
  return _fprintf(stderr, "%s\n", lamerok(balabol(ya(str, "ya "), "balabol"), "-lamerok"));
}


kokoko(fprintf, append, append, append);

С сишным синтаксисом типов разбирать их - уже нетривиальное дело.

Нетривиальное для кого? Для тебя?

добавляется перенос строки в конце.

Ахренеть. Как я раньше без этого жил

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

Он язык такого уровня, который требуется

Нет. Он язык никакого уровня. Пиар построен на пропаганде с эксплуатацией safe - он safe, ну по крайне мере со слов пропагандистов. Во всём остальном уровень заканчивается.

Есть уровень в жабаскрипте? Нет. Есть уровень как в сишке? нет. Есть возможности как в крестах - нет. Есть safe как в жабке? Нет.

Ничего нет - зато как бэ «нужного» уровня всё есть.

Хочешь писать низкоуровнево — пиши низкоуровнево.

Смешно.

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

100500 раз синтаксис меняли и в конечном итоге пришли к сишному

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

На каком основании из первого следует второе?

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

int kokoko(int _fprintf(FILE *, const char *, ...), char * ya(char *, char *)

Что ты хотел сказать таким примитивным юзкейзом? Давай массивы функций, функции в структурах, функции, возвращающие функции.

Нетривиальное для кого? Для тебя?

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

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

Фигурные скобки есть в каждом втором языке

Но в паскале, которым, по твоим словам, вдохновлялись создатели раста - нет.

Видел как это решают добавлением имени типа к имени переменной как префикс или суффикс

А я только слышал про это страшные сказки.

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

Не знаю, я в основном на C++ писал, когда надо было, Питон за пару недель освоил. И с чтением кода проблем не было, как и с написанием. Впрочем, если в коде переменные назывались a1, a2 и всё такое, то были проблемы, но говнокод - это отдельная статья.

Но скилл телепатии прокачан не у всех

А зачем там телепатия?

Не знаю, но вполне возможно.

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

У printf он еще с фортрана не менялся

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

А тут предлагается какой-то новый

Вообще-то, он ещё в сисярпе появился. А может, я опять ошибаюсь, и того раньше.

без предшествующих нулей/пробелов

Это что ещё за зверь?

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

И это был лучший вариант из возможных.

Ну да.

Или может, поведаешь, как ты бы поступил в этом случае?

Я бы изначально сделал паскалевский вариант.

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

Однако, я не вижу в rust каких-либо киллер фич для этой сферы применения.

Возможность делать более высокоуровневые абстракции там, где можно. Ну, и safety.

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

Есть уровень как в сишке?

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

Есть возможности как в крестах - нет.

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

Есть safe как в жабке?

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

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

то покажи как просто можно передать через rust-овую ссылку NULL?

Option<&i32>

Пустой Option - аналог нулевого указателя и оптимизируется, кстати, как раз в указатель. Для FFI имеются и «обычные указатели».

Что там есть аналогичного указателю на void?

c_void или Any, смотря что тебе нужно.

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

А тут предлагается какой-то новый, с автоопределением типа, но, увы, без предшествующих нулей/пробелов.

Да ладно?

println!("{:>6}", 1);  // "     1"
println!("{:>06}", 1); // "000001"

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

Однако, я не вижу в rust каких-либо киллер фич для этой сферы применения.

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

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

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

Опциональных параметров, например. Переменного количества аргументов. Или (пока ещё) специализации.

P.S. Я за раст, если что.

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

Олсо,

char str[100500];

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

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

Он язык такого уровня, который требуется. Хочешь писать низкоуровнево — пиши низкоуровнево. И наоборот.

Помнится, один такой как-то однажды захотел Си с конструкторами и деструкторами и тоже рассказывал, что «Хочешь писать низкоуровнево — пиши низкоуровнево. И наоборот.»

А чем всё кончилось, - известно.

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

Нетривиальное для кого? Для тебя?

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

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

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

А что делают на панели слева иконки из кед? Тумбочка вроде от Dolphin, шестеренку тоже в кедах где-то видел эту.

Ну они же свободные? Что бы их и не взять?

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

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