LINUX.ORG.RU

Продемонстрирована возможность разработки частей Linux на Rust

 , ,


4

9

Французский программист написал статью, в которой рассмотрел возможность переписывания ядра Linux на Rust.

В статье отмечено, что данный язык хорошо подходит для системного программирования, будучи достаточно низкоуровневым и при этом лишённым многих недостатков C, и уже используется для написания новых ОС. Однако автор не считает создание ОС с нуля перспективным для серьёзного применения, и последовательный перенос отдельных частей Linux на Rust для решения различных проблем безопасности кажется ему более целесообразным.

В качестве «Proof of Concept» была приведена реализация системного вызова, содержащая вставки на Assembler внутри unsafe-блоков. Код компилируется в объектный файл, не связанный с библиотеками и интегрируемый в ядро во время сборки. Работа производилась на основе исходного кода Linux 4.8.17.

>>> Статья



Проверено: Shaman007 ()
Последнее исправление: sudopacman (всего исправлений: 5)

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

У C++ 1400 страниц стандарта этим пронизано.

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

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

Может подождать сначала 13 лет, чтобы вылежался? Как с С++, а?

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

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

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

запилили бы хотя бы две независимые реализации

Объясните сакральный смысл траты ресурсов на разработку и поддержку двух независимых компиляторов

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

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

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

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

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

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

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

И если вас смущают громкие заявления - то научитесь их фильтровать. Ведь они есть в любом языке: «в java нет утечек памяти», «write once run anywhere», «go позволяет писать многопоточные приложения без усилий», «гарантии rust можно реализовать в современном C++», «C переносим по умолчанию» и тд.

нет чувак, не указывай что НАМ делать — мы будем делать то, что МЫ считаем верным, а не прогибаться под говнопроповеди говноевангелистов

в частности, заведомо ложные высказывания полезно (для общего блага) разоблачать

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

Когда же выясняется, что Rust опирается на обещания разработчика и делает проверку только на основе этих обещаний, то разговоры про «гарантии» — это недобросовесный маркетинговый булшит. Говорили бы про помощь с борьбе с data races, было бы более точно. А так есть ощущение, что пытаются мягко на*бывать.

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

а что касается самого языка — unsafe это конечно лучше, чем ничего, но явно недостаточно; ребята стараются сделать получше, но когда у них не получается, уж больно легко останавливаются и заявляют что типа «и так хорошо» — это их основная проблема

язык, у которого стандартная библиотека на unsafe-ах, лично меня совсем не устраивает; гораздо лучше было бы, если бы стандартная библиотека требовала километровых простыней доказательств, недоступных обычным программистам (и проверяемых какой-то тулзой); но хороший язык должен все же давать возможность написать стандартную библиотеку без unsafe-а и километровых простыней

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

язык, у которого стандартная библиотека на unsafe-ах, лично меня совсем не устраивает

Боже мой, как же ты живешь и на каком системном языке пишешь, где stdlib без ансейфа?

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

Касательно split_at_mut, то натыкаемся на то, что Rust не реализует поведение среза, он делегирует это библиотеке (в данном случае core), а это не может быть реализовано без unsafe.

Unsafe — неизбежное зло, которое даёт возможность реализовывать свои собственные механизмы в рамках безопасности Rust о которых Rust не может знать.

существенно то, что «не может быть реализовано без unsafe» и «Unsafe — неизбежное зло» верно вовсе не для всех языков, т.е. существуют языки, для которых твои утверждения неверны

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

Боже мой, как же ты живешь и на каком системном языке пишешь, где stdlib без ансейфа?

я был избыточно краток; «лично меня совсем не устраивает» означает " лично меня совсем не устраивает как язык для перехода на него по той причине, что переход на него не окупится"

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

что переход на него не окупится

Это другой вопрос, не связанный с ансейфом.

Если говорить об ансейфе, то в C++ весь код — анфейф, вся стандартная либа, в Rust он строго локализован и присутствует только в умных указателях и в реализации с контейнерами, которые работают с памятью напрямую (априори небезопасное действие)

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

Вот скажи мне, каким местом ты читал? Я 8 раз упомянул Rust в том сообщении.

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

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

Конкуренция? Адаптация языка под специфические условия (оборонка, космос, энергетика)?

Но раз вы вообще ничего не поняли, то специально для вас: стандарт C++ такой толстый потому, что это спецификация языка и стандартной библиотеки для обеспечения возможности создания независимых реализаций. Ограничился бы C++ всего одним компилятором (как Rust-сейчас), не было бы и того толмуда на 1.5K страниц, над которыми малолетние дебилы (c) не устают потешаться.

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

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

А оставшаяся часть предложения? Ты её читал?

Unsafe — неизбежное зло, которое даёт возможность реализовывать свои собственные механизмы в рамках безопасности Rust о которых Rust не может знать.

Где в этом предложении, говорится не про Rust, а про все языки на свете? Как unsafe из Rust у тебя превратился в unsafe где-то ещё?

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

Это другой вопрос, не связанный с ансейфом.

почему ты так считаешь? я считаю по-другому

Если говорить об ансейфе, то в C++ весь код — анфейф, вся стандартная либа,

ну почти так

в Rust он строго локализован

строго

гы-гы-гы

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

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

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

Речь именно про евангелистов языка. По степени убежденности в наличии серебряной пули Rust-оманы соперничают разве что с Lisp-ерами и Oberon-щиками :)

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

Конкуренция?

Конкурения с кем? Внутри экосистемы? Спасибо, не нужно.

Адаптация языка под специфические условия

Сводится обычно к написанию своей STL, не всегда совместимой, и своего бэкенда компиляции. Всё это не имеет отношения к компилятору.

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

Давай повырываем из контекста :)

почему ты так считаешь?

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

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

Где в этом предложении, говорится не про Rust, а про все языки на свете? Как unsafe из Rust у тебя превратился в unsafe где-то ещё?

в этом треде, где раст сравнивается с другими языками программирования, присутствуют «все языки на свете»; кроме того, слово «неизбежен» несет в себе явный квантор (оттенок) всеобщности

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

Спасибо, не нужно.

Ваше мнение понятно и неинтересно.

Всё это не имеет отношения к компилятору.

Ваше мнение понятно и неинтересно.

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

в этом треде, где раст сравнивается с другими языками программирования, присутствуют «все языки на свете»; кроме того, слово «неизбежен» несет в себе явный квантор (оттенок) всеобщности

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

Маразм крепчал...

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

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

а какие у тебя задачи?

вот у меня маячит задача довольно сложная алгоритмически с жестокими требованиями на быстродействие, но проблем с указателями (на которые нацелен раст) в ней скорее всего не будет (хотя надо подумать) — буду видимо писать на с++

следующее, что меня в с++ не устраивает — это ужасный синтаксис, но раст опять же эту проблему не решает, там тоже синтаксис ужасен, может даже еще хуже

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

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

ужасный синтаксис

Попробуйте паскаль

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

Я решаю те задачи, которые передо мной стоят и которыми мне интересно заниматься.

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

форков других репозиториев?

Что плохого в форках репозиториев, интересно?

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

мое уточнение не является маразмом, подумай об этом

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

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

Я решаю те задачи, которые передо мной стоят и которыми мне интересно заниматься.

Если такие задачи не превышают по сложности «hello, world», то на их основе нельзя делать выводы о преимуществах конкретного языка над альтернативами.

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

Это заблуждение.

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

Писать сложную задачу стоит на известном языке, ясен пень.

ну не факт; я сказал «алгоритмически сложную»; это значит, что проблем «ой, вот я тут так рассчитывал на вот этот паттерн из ооп, но на трейтах не получается ну никак, поэтому все придется переписывать» не возникнет

Попробуйте паскаль

тоже ужасный синтаксис

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

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

гы-гы

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

ну раскрой тему; почему, по-твоему, приход к моему уточнению является маразмом

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

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

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

тоже ужасный синтаксис

А какой синтаксис вам нравится?

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

А какой синтаксис вам нравится?

я привык на ты общаться

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

взять хотя бы декларации типов, объявления переменных, необходимость делать функцию в дополнению к конструктору класса (std::make_pair например), try-catch вокруг списка инициализации конструктора, да вообще трудно найти код, который нельзя было бы записать красивее

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

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

Нет.

Уточнять — делать более точным, придавать большую точность чему-нибудь.

Ты начал с опровержения.

существенно то, что «не может быть реализовано без unsafe» и «Unsafe — неизбежное зло» верно вовсе не для всех языков, т.е. существуют языки, для которых твои утверждения неверны

ну раскрой тему; почему, по-твоему, приход к моему уточнению является маразмом

Я в сообщении не говорил про другие языки, ты сам это додумал (маразм).

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

более-менее приличный синтаксис у питона

Вкусовщина, конечно.

Да и стоит брать во внимание то, что питону не нужно выражать в синтаксисе столько сущностей как C++/Rust/etc (там просто нет статического полиморфизма хотя бы: шаблонов/дженериков, которые синтаксис и нагружают в основном).

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

читаю тебя и ржу

Я в сообщении не говорил про другие языки, ты сам это додумал (маразм).

да, сам (хотя тебе бы следовало иметь в виду более широкую перспективу); но так почему это маразм?

Нет. Уточнять — делать более точным, придавать большую точность чему-нибудь.

ты школьник что ли, чтобы на словарик ссылаться?

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

если тебе это не ясно — вот пример: производный класс является уточнением класса-предка, и это уточнение может достигаться с помощью method overriding в производном классе, т.е. фактически с помощью «опровержения» поведения этого метода на более узком круге объектов

www_linux_org_ru ★★★★★
()

В левом углу ринга те кто знаком с rust, а в правом углу ринга далпоёпы которые ищут не состыковки в описании языка и возводят их в абсолют ради хайпа.

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

(там просто нет статического полиморфизма хотя бы: шаблонов/дженериков, которые синтаксис и нагружают в основном)

там даже типы аргументов функции не описываются, и да, любое описание типов нагружает восприятие (и его следует продумать), но все равно в плюсах это сделано ужасно (а в расте еще хуже)

www_linux_org_ru ★★★★★
()
Последнее исправление: www_linux_org_ru (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.