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)

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

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

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

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

разработчики Rust не имеют никакого отношения к Redox

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

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

И в чём же я обделался? Ты выклал мне убогий кастыль, который ничего не значит и не нужен. Это моя проблема?

fn main() {
  let mut foo = 0;
    // if{(++foo) == 1} {
    //     println!("Hello, world!");
    // }
    if{foo += (foo == 1)} {
        println!("Hello, world!");
    }
}

Оно же ничего не может. Нахрен мне такое счастье? Да и фигурны скобочки после if выглядят как дерьмо.

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

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

Слишком слабо + скобочки фигурные выглядят как помойка. if{ - просто уродство.

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

И в чём же я обделался?

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

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

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

Покажи мне пример, где без раст обойтись нельзя.

Я с тобою уже спорил по этому поводу - я хочу не обходится - я хочу иметь возможность писать красиво.

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

От одних названий проблевался - спасибо не надо. Я не превариваю большие буквы впринципе.

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

Это к тому, что ты меня посылаешь что-то гуглить и смотреть - я тебе уже объяснил. Я взглянул - мне хватило. Я не люблю избыточность.

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

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

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

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

Покажи мне пример, где без раст обойтись нельзя.

В этой теме.

я хочу не обходится - я хочу иметь возможность писать красиво.

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

От одних названий проблевался - спасибо не надо. Я не превариваю большие буквы впринципе.

«Я не перевариваю» - не аргумент. Ну и на всякий случай, названия эти будут видны только, если переопределяешь операторы. При использовании будут обычные/привычные символы.

Это к тому, что ты меня посылаешь что-то гуглить и смотреть

Дык, ознакомится с предметом критики необходимо. Иначе нафига такая критика вообще нужна?

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

Почему я не могу писать так, как хочу?

Можешь. В отдельной теме «Как царь видит современное положение в софтостроении».

зачем ты придираешься именно ко мне?

Я всех ненавижу одинаково.

Я буду жаловаться.

Твое право.

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

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

Именно.

Вот и найден корень непонимания в данном споре.

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

Вот и найден корень непонимания в данном споре.

Строго говоря, нет. Или объясни мне, чем на раст легче портировать с паскаля, чем с си. Ты же ведь помнишь, с чего спор начинался?

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

Ну ты понял.

Т.е. не может - ок.

Понимаешь в чём смысл этого кода - это вменяемость. Зачем мне писать 2строчки для того, что делается одной?

А второй пример? Вообще никак?

(есть нечто забавное в том, как ты пытаешься перенести идиомы одного языка в другой)

О боже - поэтому я и не люблю с вами спорить - вы слишком мало понимаете в теме.

Результат сравнение как значение - это не идиома си - это идиома реально мира. Это основа всего.

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

Результат сравнение как значение - это не идиома си - это идиома реально мира. Это основа всего.

Результат сравнения имеет тип `bool`. Присваивание как выражение имеет тип `()`. Нельзя сложить `bool` и число. Нельзя использовать `()` вместо `bool`. `if` требует `bool`, а не `()` или число.
Ты когда-либо слышал про строгую статическую типизацию?

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

они не дают рантайм-оверхеда

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

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

Автоматическое приведение bool к числовому типу - это идиома си.

В классическом си нету bool.

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

Я про оверхед в размере исходников.

А я - про то, что растовский safe и низкоуровневое программирование в большинстве юзкейзов не взаимоисключающи.

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

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

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

Нихрена. Я видел все эти новости и там было сколько неведомой херни - сейчас её меньше. А то, что пастилась изначально с жабки/крестов/паскалика/хацкеля - это для меня не новость. Сишный синтаксис всё таки самый покулярный.

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

Зачем? Ты хочешь поспорить, что передача указателя на функцию как аргумент функции менее популярно, чем ООП на коленке?

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

Тогда в чём проблема?

Это обычный юзкейз в функциональных языках.

Функция не динамический тип - её нельзя никуда передать. Или у тебя там rwx а не ro на хипе? В твоих куллязычках?

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

Это никому не надо. Ничего там нет, кроме тормазов и непотребства. Когда адепты фп предоставят хоть какие-то аргументы за - я подумаю.

А пока они только тырят обыденные вещи и выдают за свои - всякие map и прочее.

Расшифруй.

Адепты с низки уровнем умения.

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

У аргументов есть имя, а функции семантика - отличать через константность - это такая куллстори.

void *__restrict __dest, const void *__restrict __src,
		     size_t __n

Типичный пример - тебе не ясно что значит src, а то dest? Хотя ладно - почему n не константная - это же то же входящий аргумент. Сошлёшься на семантику передачи по значению? И тут же обделаешься.

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

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

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

А это разные понятия и в этом и проблема - что никто не понимаешь сишку от слова никак.

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

Нет. Это нужно только для возврата указателя на функции из функции, а это уже юзкейс для тайпдефа.

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

Я тебе уже всё описал - что втои примеры это не одно место. Зачем ты мне это пишешь?

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

Нет - это не суть сишки. А (2 + 2) * 2 - то наверное то же кастыль?

То же самое с 2 - -2. Есть оператор, который может прибиться и к правому и левому и они равнозначны - естественно оно прибьётся к левому, т.е. первому. И для пребивания его ко второму - надо взять это в скобки.

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

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

Я уже там выше выкатил пару примеров - синтаксис и уровень связаны, ибо синтаксис - это возможность к выражению. Чем мощнее синтаксис, тем больше смысла через него можно выразить.

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

Это далеко не вкусовщина - это всё объективно.

Чем меньше избыточности в коде - тем он проще и понятней. Если 100500 лет назад надо было как-то выделять имя от типа и т.д., то сейчас это делается на уровне выше кода - той же подстветкой.

Нет смысла дублировать это буквами. Да и регистр нахрен не нужен, ибо выглядит убого - все символы на уровне нижнего регистра и с ним сочитаются, а а в большим нет.

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

Это банальный здравый смысл. Нет смысла в чём-то в сравнении с чем-то, если это что-то имеет больше требований, чем иное.

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

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

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

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

Это не переменная, а память. Если у тебя инициализируется вся память - мне тебя жаль, как и твой рантайм.

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

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

Балабольство и ничего больше. Нет никаких «марсов» и лун. Всё работает так, как должно и не существует никаких уб.

Любые косяки с многопочностью - это логические ошибки в огранизации этой самой многопоточности. С таким же успехом ты можешь сделать free() в рандом месте и говорить про «опасность».

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

ОС ну нежна. ОС - это пускался всякой готовой херни. Ни в каких сложных системах она не нужна, ну естественно кроме тех, на которых сэконосили - без разница на чём, на их реализации, либо на обучении адептов.

Все ошибки берутся из-за избыточности. Когда от общего рантайма реально юзается 0.0001% кода, а остальной баласт дрюкает память и эмулирует педали.

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

Это указатели.

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

Это всё делается генератором, если это не хелворд. Хотя да - функциями красивее.

Хотя мне не ясно зачем-то что-то возвращать, чтобы потом что-то вызвать, если можно сразу вызвать.

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

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

Я правильно понял, что если стану писать на rust, то у меня больше не будет ошибок? А студентов я привел как пример, где язык низкого уровня может быть неуместно навязан разработчику.

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

Смотрю я код линукса, и вижу: «безопасных мест» там кот наплакал. И память там лишь один из большого множества ресурсов, при работе с которыми легко налажать.

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

Нет, не существует никаких поколений. Это всё булшит.

Белые господа из серьезных организаций типа NICTA, считают, что существуют, а еще они говорят, что современные версии L4, включая seL4, — это микроядра 3 поколения.

Если ты о чем-то не знаешь, то это еще не значит, что этого нет.

Я придумал гениальную идею - хреначим дерьмо и сразу же выкатываем «первое поколение», вставляя sleep(100500) в каждую дыру.

Ну давай, умник, найди sleep или delay в коде IPC Mach!

Т.е. в линуксе не то, что первое - там минус первое поколение и если это реализовать нормально - там не будет 200тактов.

Линукс - НЕ МИКРОЯДРО говорить о поколениях некорректно.

Я лично не представляю что там можно делать 200тактов.

Значит ты не можешь в низкоуровневое системное программирование.

Каждый алёша кукарекает о том, что он напишет на расте/жабке/пхп - новый опенссл, новый линукс и прочее, которое будет безопасней и не упадёт.

seL4 имеет уровень CC EAL7 (есть формальное доказательство корректности работы микроядра), когда там Linux сертифицируют по EAL6 хотя бы?

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

Результат сравнения имеет тип `bool`.

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

#define type_eq(v, type) __builtin_types_compatible_p(typeof(v), type)

#define if_int(exp) _Generic((exp),\
  int : "int",\
  default : "!int"\
)

int main(void) {
  fprintf(stderr, "%d\n", type_eq(1==2, int));
  fprintf(stderr, "%s\n", if_int(1==2));
}

1
int

Ты когда-либо слышал про строгую статическую типизацию?

Промывка мозгов - она такая. Меня не волнует что там ты себе напридумывал, либо где-то начитался того, что придумали за тебя.

Для меня есть реальный мир, а там ничего из того, что ты мне тут выклал - не существует.

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

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

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

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

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

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

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

Перечисли Топ5 остальных, синхронизацию можешь не упоминать.

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

Сошлёшься на семантику передачи по значению? И тут же обделаешься.

Почему?

Кстати, кое-где принято такие параметры тоже константными делать. В определении функции, естественно.

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

Я правильно понял, что если стану писать на rust, то у меня больше не будет ошибок?

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

Про малое количество безопасных мест можно поспорить, но мне лень.

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

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

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

бывает... Но тогда зачем все эти танцы с бубном вокруг компилятора, если rust-oманская memorysafety не дает гарантий отсутствия утечек памяти?

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

тогда зачем все эти танцы с бубном вокруг компилятора

Зачем _кому_? Тебе, возможно, незачем. Но есть люди, которые «гарантированные утечки + возможный Heartbleed» и «возможные утечки» выберут второе.

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

Heartbleed

Это логическая ошибка. Спасёт от дыры только bounds checking, но он есть везде, где есть safe.

Ну был бы это Heartbleed, а heartdead и просто бы ронял везде опенссл.

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

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

Утечка памяти - не нарушение «memory safety».

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

Ну был бы это Heartbleed, а heartdead и просто бы ронял везде опенссл.

Даже если был бы вместо heartbleed был heartdead (даже если), это было бы гораздо лучше.

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

Нет, просто на ЛОР - сборище евангелистов всех мастей и расцветок.

Я бы посмотрел на них без «административного ресурса».

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

Я бы посмотрел на них без «административного ресурса».

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

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

В этой теме.

Т.е. ты признал убогость своего довода?

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

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

«Я не перевариваю» - не аргумент. Ну и на всякий случай, названия эти будут видны только, если переопределяешь операторы. При использовании будут обычные/привычные символ

Любой сильный адепт не пишет на api - он пишет api.

Я уже выше там пояснил про заглавные буквы и прочие пережитки прошлого века - они не имеют смысла, а раз смысла не имеют - они ненужны.

Дык, ознакомится с предметом критики необходимо.

Понимаешь в чём штука - я знаю что мне нужно и я знаю что может мне это дать и так же я знаю, что то, что нужно мне - нужно и никто это не опровергнет.

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

i += (a == b) - это не просто блажь, а это основа того уровня, на котором я ваяю и этого тебе никак не объяснить, пока ты не будешь понимать что это и зачем.

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

Иначе нафига такая критика вообще нужна?

Я не критикую ваш руст - мне он не интересен. Я критикую ваши утверждения, что мир ограничен только вашим восприятием и представлениями, вернее представлениями ваших авторитетов о нём.

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

Строго говоря, нет. Или объясни мне, чем на раст легче портировать с паскаля, чем с си. Ты же ведь помнишь, с чего спор начинался?

Паскалевские базовые непримитивные типы, такие как строки и массивы отлично ложатся в rust-овые. Вплоть до автоматической трансляции кода. Работы с указателями в проектах на паскале практически не встретишь (все же, язык высокого уровня), а где попадется - пихаем в unsafe.

В С же, строки обычно представлены указателями на ноль-терминированную строку. И указывают они не обязательно в начало буфера со строкой. Арифметика указателей часто имеет место. Сконвертить это в str или String без вмешательства человека и глубокого понимания происходящего невозможно. С массивами те же проблемы + длина, обычно прилепленная отдельной переменной. Ищем и интегрируем ее опять вручную. Массивы предопределенной длины - отдельные заморочки с прибиванием длины к типу и sizeof. Ну и на последок самое вкусное: повсеместные алокации памяти разными способами. Суем в контейнеры? А область видимости?

Можно, конечно, тупо все протранслировать в работу с указателями, но тогда это будет один большой unsafe{...}, и для интеграции с нормальным кодом на rust понадобятся прослойки, конвертирующие форматы.

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

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

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

tailgunner это же типичный rooster. Ему печёт ото всего, кроме rust-а.

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

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

Ахаха, о вау. Если верить анонимусам ЛОР, Rust - самый ненужный говноязык из всех, со значительным отрывом от PHP. И да, вывод сделан на основе комментариев, которые пережили банхаммер.

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

гибридное оно именно потому что негибридное тормозит

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

не вижу связи - принципы не изменились

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

Ну не знаю - не знаю. Для любой домохозяйке лучше дырявый, но рабочий вконтактик, чем не рабочий.

даже если

Был бы - я не верю, что в расте необработанный bounds checking мистическим образом завершит инстанс, а не упадёт.

Если же начать говорить об «обработке», то это уже требование и с таким же успехом его можно требовать и от сишника.

И проблема хертблида - это убогий код опенссл родом из 70-х годов - он уже отжил своё.

Но проблема в том, что некому его переписать. Уже вот 20-30 лет так и не появилось никаких выходцев-адептов новых языков, которые бы могли делать что-то так, чтобы их реализация была хотябы на уровне того непотребства, что представляет из себя openssl.

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

Для любой домохозяйке лучше дырявый, но рабочий вконтактик, чем не рабочий.

Ага, ага, для любой. Слышал про The Fappening? Google it.

я не верю

Всем пофиг.

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

не вижу связи - принципы не изменились

Расходы на переключение контекста фиксированные. Частота переключения тоже. Соответственно, если у тебя переключение жрёт, скажем, 10000 тактов и переключаешь контекст ты 100 раз в секунду, то на 4МГц на процессы переключения уйдёт 25% процессорного времени. Но на 4ГГц на те же процессы уйдёт уже только 0.025% времени.

Цифры примерные, конечно, чисто для иллюстрации отношения.

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