vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner
Похоже, что желание создать нормальное Free Software, в смысле, такое, которое пользователь действительно свободен модифицировать, потому что способен понять, таки начинает у народа возникать.

Вот, например, Tomb, юзер-френдли инструмент для создания криптованных дисков, написанный на shell. Под лозунгом complexity hides insecurity.

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

Но в общем и целом подход вполне заслуживает внимания.

Date: 2015-07-25 05:26 am (UTC)
From: [identity profile] max630.livejournal.com
шелл как язык программирования в смысле безопасности, да и вообще надёжности в разных ситуациях, не внушает мне доверия

Date: 2015-07-25 07:45 am (UTC)
From: [identity profile] mc6312.livejournal.com
> И именно поэтому код на нем получается компактным и обозримым.

Угу, и состоит из вызовов внутренностей *sh (писанных скорее всего на сях) и внешних программ, писанных на черт знает чём. Т.е. просто заметание мусора под ковёр.

Date: 2015-07-25 09:35 am (UTC)
From: [identity profile] cross-join.livejournal.com
Безопасность - это компромисс между языковыми возможностями и умелыми руками.
К концу прошлого века эти компромиссы оформились в виде Ады и Оберона.

Date: 2015-07-25 10:15 am (UTC)
From: [identity profile] max630.livejournal.com
По-моему, шелл в части безопасности хуже чем даже C, проблемы которого легко обойти, и автоматически проконтролировать что нигде ничего не упущено. Вообще безопасность в первую очередь зависит от того что можно чегко увидеть что делает код и быть уверенным что он делает именно это всегда. С C по моим ощущениям большинство уязвимостей связано с переполнением целых, и это как раз то место где он ведёт себя неочевидно. Шелл же ведёт себя неочевидно примерно везде. Вот там printf в коде. Вы насколько уверены что он именно напечатает строку, а не пошлёт пароль рута в интернет?

Ещё хорошо что они bash не использовали, тот вообще до недавнего времени выполнял произвольные команды из окружения при запуске, да и сейчас механизм импорта функций из окружения такой что в общем случае вообще ничего нельзя передавать из пользовательского ввода, потому что любая переменная может оказаться с тем же именем что и используемая в скрипте команда. Но и zsh тоже такой комбайн что не удивлюсь что там что-то найдётся.

Date: 2015-07-25 12:13 pm (UTC)
From: [identity profile] qkowlew.livejournal.com
С C по моим ощущениям большинство уязвимостей связано с переполнением целых, и это как раз то место где он ведёт себя неочевидно

facepalm.jpg

- арифметика указателей
- логика помещения в стек параметров и возвращаемых значений
- отсутствие в рамках языка средств контроля адресных пространств

Порождены и упомянутый Вами, и эти спецэффекты именно низкоуровневостью изначальной архитектуры и нежелании (на начальных этапах существования языка) потратить на средства контроля хоть копейку имеющихся ресурсов КАК на этапе исполнения, ТАК и на этапе компиляции.

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

Date: 2015-07-25 02:32 pm (UTC)
From: [personal profile] leotsarev
Зато мне неоднократно удавалось написать содержательный код на Си, который компилировался в не менее эффективную программу, нежели тот же самый алгоритм, реализованный на ассемблере той же машины.
Вроде как сейчас считается, что опытный программист проигрывает современным компиляторам в попытке написать столь же эффективный ассемблерный код в подавляющем большинстве случаев, и эта попытка в принципе не имеет смысла (а вот посмотреть что компилятор сгенерил и попробовать улучшить в критическом цикле — может иметь смысл).

Кстати, в связи с этим крайне интересен язык Rust. Сохраняя идею «нулевого рантайма» (в смысле ни капли ресурсов на контроль во время исполнения), он пытается проверить и доказать корректность использования указателей на этапе компиляции.

Date: 2015-07-26 04:08 pm (UTC)
From: [identity profile] qkowlew.livejournal.com
сейчас считается, что опытный программист проигрывает современным компиляторам в попытке написать столь же эффективный ассемблерный код в подавляющем большинстве случаев

Я лично считаю, что опытный программист способен написать и ОТЛАДИТЬ одинаково эффективный код на низкоуровневом языке МЕДЛЕННЕЕ, чем сколь угодно опытный на языке высокого (в смысле контроля) уровня.

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

Date: 2015-07-25 05:55 pm (UTC)
From: [identity profile] max630.livejournal.com
> арифметика указателей

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

Date: 2015-07-26 04:04 pm (UTC)
From: [identity profile] qkowlew.livejournal.com
Остальные ошибки как я понимаю, тривиальны

Вашими бы устами...

Date: 2015-07-25 10:00 pm (UTC)
From: [personal profile] ramendik
Шелл же ведёт себя неочевидно примерно везде.
+1024

Date: 2015-07-25 06:41 am (UTC)
From: [identity profile] otstavnov.com (from livejournal.com)
По-моему, пресловутая "высокоуровневость" шелла во многом обусловлена его особым местом в ОС. Если написать привязки всех утилит к пайтону, на пайтоне тот же код будет сопоставимо компактен, нет?

P.S.: Ну или для sys.* придумать сопоставимый синтаксис.
Edited Date: 2015-07-25 06:45 am (UTC)

Date: 2015-07-25 07:07 am (UTC)
From: [identity profile] permea-kra.livejournal.com
>пайпы, параллельное выполнение. А работа с переменными играет вспомогательную роль.

В таком стиле можно писать, например, на хаскеле. Или на эрланге. Да хоть на перле.

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

Date: 2015-07-25 08:08 am (UTC)
From: [identity profile] permea-kra.livejournal.com
Тогда весь смысл высокоуровневого языка пропадает, поскольку в оном языке можно сцепить функционал с минимальными телодвижениями.

Т.е. я понимаю, что на шелле иначе нельзя, но это не достоинство. Ладно еще, что для преобразований колоночных форматов есть awk, и то хлеб. Но если однострочника на оном не хватает, приходится делать то самое (писать программу на нормальном языке)

Date: 2015-07-25 07:08 am (UTC)
From: [identity profile] otstavnov.com (from livejournal.com)
Если заставить писать для всего, что есть в системе, привязки на языке X (в том смысле, в котором "утилита" является "привязкой" к шеллу), разумеется, ты можешь запустить исполнение чего угодно параллельно с односторонней передачей данных, если в X в принципе есть такие средства. Очевидная же вещь. (Менее очевидные и более смешные вещи будут при двусторонней передаче, на чем сценарные языки для GUI и ломаются).

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

Date: 2015-07-25 07:55 am (UTC)
From: [identity profile] otstavnov.com (from livejournal.com)
Я "заставить" имел в виду только в том смысле, в котором утилита может быть запущены родной конструкцией шелл. (пока Поттеринг rundll для GNU/Linux не придумал.) Мы просто не называем утилитой (ОС) то, что не может быть так запущено. Это логическое принуждение, а не введение какой-то несвободы.

По поводу второго: ты совершенно прав.

Date: 2015-07-25 09:13 am (UTC)
From: [identity profile] otstavnov.com (from livejournal.com)
На сегодня я думаю, что ближайшим аналогом модели печатающего оператора и конвейеров в линейной среде для нелинейной среды может быть акторная (в том виде, до которого ее дотянули в эрланге или акке), а не недообъектная à la си++ и ява (остатки которой мне мерещатся в ява/ЭКМАскрипте, хотя я здесь могу просто ошибаться ввиду недоученности).

При этом я бы очень удивился синтаксису, обеспечивающему такую семантику и сопоставимому по фундаментальной простоте с шеллом. А некоторые моменты с безопасностью в акторной модели, действительно, решались бы (если бы акка не на JVM была реализована).
Edited Date: 2015-07-25 09:19 am (UTC)

Date: 2015-07-25 10:05 pm (UTC)
From: [personal profile] ramendik
Идея заменить утилиты на что-то вроде модулей более строгого языка, была еще в Oberon-системе у Вирта. Не выстрелило.

Аргумент от рынка, у тебя? Или я чего-то не понял?

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

Date: 2015-07-25 09:05 am (UTC)
From: [identity profile] afa-at-work.livejournal.com
эх
линуксонли

Date: 2015-07-25 02:10 pm (UTC)
From: [identity profile] afa-at-work.livejournal.com
ну смотрю потихоньку, что с geli получится. вроде особых затыков не должно быть - но огорчает изначальная ориентация строго под одно семейство. как раньше всё было только под винду.

Date: 2015-07-25 05:09 pm (UTC)
From: [identity profile] karpion.livejournal.com
Авторы множества кроссплатформенных программ (например, Apache) смотрят на Вас с недоумением.

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

Date: 2015-07-25 07:49 pm (UTC)
From: [identity profile] karpion.livejournal.com
Яро содержит не только драйверы.

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

Date: 2015-07-26 05:36 pm (UTC)
From: [identity profile] karpion.livejournal.com
Если уязвимости в дизайне железа окажутся не выявленными никогда (т.е. весь срок жизни железа) - то это как бы их и не было.

Интересно было бы прочитать про разницу драйверов в разных OS. Ну что там м.б. разного кроме названий функций и порядка аргументов?

Запрет разработчикам железа поставлять драйверы - не сработает. Ну, сделают отдельную фирму для написания драйверов. А M$ и без NDA никому ничего не расскажет.

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

Date: 2015-07-27 07:53 am (UTC)
allter: (me)
From: [personal profile] allter
> Если уязвимости в дизайне железа окажутся не выявленными никогда (т.е. весь срок жизни железа) - то это как бы их и не было.

Они не будут выявлены теми, кто получает деньги не за безопасность, а за фичи. Это не значит, что они будут не выявлены (и сохранены в тайне) и теми, кто получает деньги за "безопасность".

Date: 2015-07-25 09:24 pm (UTC)
From: [identity profile] afa-at-work.livejournal.com
эт.. мне не важно, насколько оно одинаково там где неонка. я хочу одинаковой морды и поведения. а что там в потрохах, как контейнер создается, есть или нет кроссплатформенная совместимость - мне пофиг.
и вот морда к администренью контейнера - может быть мультиплатформенной. своя в репах линуксы или портах фри. благо, что основа одна.

Date: 2015-07-25 09:58 pm (UTC)
From: [personal profile] ramendik
Лично для меня shell код становится нечитаемым после 10-15 строк. Чтобы код ыл читаем и легко модифицируем, по моему мнению требуются инструменты, минимизирующие нечитаемый синтаксис и навязывающие читаемый код. И первый из них ныне python (после добивания Паскаля любителями поэкономить такты).

Date: 2015-07-26 05:30 am (UTC)
From: [personal profile] ramendik
Адресная арифметика вне кода, работающего непосредственно с аппаратурой (по нынешним временам как правило в ядре) - по-моему зло. На уровне "не должно быть, потому что не должно быть никогда".

Но в целом критика понятна, хотя многое доделано в Обероне.

Date: 2015-07-26 06:07 am (UTC)
From: [identity profile] mc6312.livejournal.com
> fuse
...с адовыми тормозами...

Date: 2015-07-26 02:27 pm (UTC)
From: [personal profile] ramendik
Это да, но тогда сделать бы и прослойку для доступа любой к графической карте? Чтобы проприетарные драйверы могли не требовать встраивания в ядро и тем самым не создавать лицензионных проблем (userspace Линус считает настолько отделённым, что GPL не действует). Опять же их тогда можно будет рестартовать при глюках, заплатив лишь перерисовыванием экрана или в худшем случае падением X-сервера, а не системы.

А так - да, хорошо, в Паскале, каким он был в критический момент, не хватало требуемых для ядра средств. Но почему тогда в юзерспейсе пошли косяком монстры? C++/COM - вообще без комментариев, он меня и отпугнул от программирования. В параллель развивался Unix, но там был то Си в хвост и в гриву (а совсем не только в ядро), то абсолютно непредсказуемый и сложный на ровном месте shell, то потом perl, поощряющий obfuscated code чуть ли не нарочно.

Из всех этих нечитаемых наборов я могу понять, пожалуй, почему занял прочное место regexp. Там за write only мы получаем "быстро сделать со строкой ровно то, что надо, при условии что везде правильно попали". Но почему ТАК выглядит всё остальное?

Edited Date: 2015-07-26 02:28 pm (UTC)

Date: 2015-07-27 08:03 am (UTC)
allter: (me)
From: [personal profile] allter
Потому что эти "нечитаемые" инструменты созданы для быстрого решения практических проблем (а не "подумать, формализовать, спроектировать, реализовать, внедрить").

Date: 2015-07-27 08:09 am (UTC)
allter: (me)
From: [personal profile] allter
P.S. А прослойку для доступа к графической карте уже пишут - wayland. Хотя, по-моему, и X11+DRI достаточно для этой цели.

Date: 2015-07-29 12:34 pm (UTC)
From: [personal profile] ramendik
Не, я про совсем другое. Про низкоуровневую часть самого драйвера карты - работу с регистрами и кусками памяти и т.п. В идеале разбить нынешний драйвер карты на стандартную для любых карт часть, живущую в ядре, и логику для данного чипа, живущую в юзерспейсе.

Date: 2015-07-26 08:07 pm (UTC)
From: [identity profile] qkowlew.livejournal.com
https://2ton.com.au/rwasa/

маниаки всё ещё есть...

Profile

vitus_wagner: My photo 2005 (Default)
vitus_wagner

May 2025

S M T W T F S
    1 2 3
4 56 7 8 9 10
11 12 131415 1617
1819202122 2324
252627 28293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 28th, 2025 08:58 pm
Powered by Dreamwidth Studios