LINUX.ORG.RU
ФорумTalks

Curl переезжает на Rust

 , ,


1

6

Привет, ЛОР!

Как ты, наверное, слышал, Rust зачастую используется как замена языку C, позволяющая избежать множества проблем, связанных с утечками памяти и безопасностью.

Daniel Stenberg, один из авторов curl, написал, что hyper – библиотека для работы с HTTP в Rust – в будущем будет использоваться как бэкенд для curl для работы с HTTP.

Ссылка: https://daniel.haxx.se/blog/2020/10/09/rust-in-curl-with-hyper/

эээ... библиотека-то будет уже бинарная, не jit? rust нужен только при сборке, так? компилятор rust же следит, чтобы безопасно выделять память? то есть все круто, да? но какой вектор атаки они хотят закрыть? через использование libcurl в php?

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

если учесть, что curl используется в первую очередь для http, это практически так и есть.

crypt ★★★★★
()

Не переезжает, а будет использовать в качестве одного из бекендов, и то не точно. Автору хочется checked allocations, а их пока нет в stable.

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

Ну вот вроде да. Но мне интересно где будет рантайм Rust. У него как бы нету какого-то runtime с планировщиком как в Go например, но базовая библиотека то есть. И что интересно будет если потому какая-то вторая библиотека сделает тоже самое что и libcurl. И допустим они будут в .so файле. При загрузке тогда можем получить две разные стандартные библиотеки Rust с неясно какой взаимной совместимостью. Наверное в дистрах прийдется пихать librust-std в еще один .so и смотреть чтобы все было собрано с одной версией?

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

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

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

Как бы при желании можно наверное во все символы вписать версию.

vertexua ★★★★★
()

Rust itself is not there yet

Не смотря на то, что это жирнющий вброс, ещё пара таких новостей, и раст придётся таки начинать учить.

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

библиотека-то будет уже бинарная, не jit?

Да.

rust нужен только при сборке, так?

Да.

но какой вектор атаки они хотят закрыть?

int* foo (void)
{
  int x = 0;
  <...>

  return &x;
}

int main ()
{
   int *x = foo();
   ...
   return 0;
}

Вот такой, например.

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

ещё пара таких новостей, и раст придётся таки начинать учить.

Зачем? Продолжай быдлокодить на чём ты там сейчас быдлокодишь.

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

Что думаешь по поводу вот этого?

Curl переезжает на Rust (комментарий)

У меня чуть матчасть хромает как это должно делаться при например динамической линковке

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

Rust вроде не экспортит свои функции в dylib, только то что ‘pub extern «C»’

Соответственно проблемы ничем не отличаются от сугубо Си-шных so-шек с одинаковыми символами.

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

Вот такой, например.

это понятно. я как админ рассуждаю. этот код надо как-то эксплуатировать. локально я еще не видел взломов через curl. он же не суидальный.

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

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

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

локально я еще не видел взломов через curl. он же не суидальный.

А через что ты видел взломы? Потому что CVE в curl таки были.

hateyoufeel ★★★★★
() автор топика

Daniel J. Bernstein на всё это смотрит с недоумением.

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

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

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

Но мне интересно где будет рантайм Rust.

не въехал. обычный системный рантайм. это не перл и не python. нет виртуальной машины afaik

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

спору нет. а собирать-то мне под него легко что-то будет? смогу я на компиляторе (и вообще с тулчейном) 2 годичной давности собрать новый код? или там бампы каждый месяц? вот такие стерперские вопросы меня волнуют. в разрезе работы со стабильными системами.

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

Не проверял/не сталкивался. По идее проблем быть не должно, так как все имена функций всё равно «манглятся» (имя+хеш), это же не сишка. Rust же из коробки поддерживает множество версий одной и той же либы, хотя это и немного другое.

А так, curl будет дёргать сишное апи. А что там дальше роли играть не должно.

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

да не, будет все просто: будет наша сишная libstd, за нее будет цепляться libstdrust (названия условные) и потом будет эта libhyper для curl, залинкованная за libstdrust. и усе. а в curl будет при сборке определен бекэнд. сишный (libcurlhttp) или libhyper.

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

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

This sounds like the usual EEE playbook. Some powerful party wants to take away your project. The new slightly incompatible curl will then be the new “curl”, and the current curl will be dead. We have seen it so many times.

Лол, и тут они.

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

Там много вариантов сборки. Начиная от musl вместо glibc и заканчивая произвольным глобальным аллокатором.

Рантайм - очень абстрактное понятие.

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

если вспомнить bind 10, то ничего удивительного.

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

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

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

а не локально-формальных без повышения привилегий

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

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

В случае C/C++ - отсутствие ПМ. hello world ещё норм, но всё что сложнее превратится в ад и проще собрать на месте.

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

Статическая сборка - решение всех проблем. И это пожалуй единственная фича, которую Go сделал верно. Они правда dead code elimination не осилили пока.

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

А если я скажу что ... дырки может быть весьма не тривиальным?

ты можешь сэкономить усилия:) я уже видел в треде про днюху, что тебе еще нет 30=) я заметно дольше тебя в курсе:)

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

warning: address of stack memory associated with local variable ‘x’ returned

-Werror даст ту же реакцию, что и раст. Смысл переписывать?

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

ммм... могу я считать, что этот вопрос исходно ко мне? формулировка: что мешает мне на RHEL6 установить последний тулчейн для сборки верна?

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

-Werror даст ту же реакцию, что и раст.

99% кода на сишке не соберётся с -Werror в принципе.

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

спору нет. а собирать-то мне под него легко что-то будет? смогу я на компиляторе (и вообще с тулчейном) 2 годичной давности собрать новый код? или там бампы каждый месяц? вот такие стерперские вопросы меня волнуют. в разрезе работы со стабильными системами.

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

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

исходно я поднял тему Curl переезжает на Rust (комментарий) ... стандартная библиотека входит в тулчейн. при сборке нового фактически нужна полная пересборка системы. нарушается ABI. старые пакеты (если это продакшн) перестают работать. и не всегда старый софт собирается новым тулчейном.

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

не так давно я еще RHEL6 использовал. как-то они этот вопрос решали (не с rust, а с последними версиями). смотрел сборочную систему у FreeBSD - и там периодически что-нибудь слетает при бампе.

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

веганы... curl штука достаточно базовая. без нее часто нельзя обойтись. обновляется php - обновляется curl.

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

Сегодня в Curl юзает Rust,
А завтра опенсорс продаст

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

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

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

malloc() в Си при невозможности выделить память тихо возвращает NULL. Так называемый системный язык Rust кладёт библиотеку в панику и, соответственно, жёстко прерывает работу вызывающей программы. Для curl - это no go. И хорошо.

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