LINUX.ORG.RU

Почему до сих пор нет libos?

 , , , ,


0

2

По мотивам этого топика.
Ладно, в венде и *nix системах всё сильно отличается. Но вот беда: linux от freebsd тоже сильно отличается, а freebsd имеет отличия от netbsd, а макакось тоже имеет кучу специфичных мест.
Нужно создать библиотеку libos, чтобы был единый API для всех операционных систем. Например, нужно опросить систему по оборудованию, процессам, пользователям... Просто берём и вызываем функцию из libos, а в libos прописаны специфичные хуки для конкретных систем.
С такой библиотекой можно слинковать весь системный софт и он станет кроссплатформенным.

★★★★★

Почему же нет, вот н-р для С++ есть boost, который имеет кучу хаков для каждого компилятора и ОС. Ну или java,python и т.п. в какой-то мере позволяет писать кроссплатформенный код. Другое дело, что чем более высокоуровневую обертку мы напишем, тем менее эффективно она будет работать на каждой конкретной платформе.

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

Ну там есть POFIX. А вроде POSIX и там как-то немного есть.

anonymous ()

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

emulek ()

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

Одно дело, когда есть специализированная утилита типа dmidecode, а другое дело, когда в библиотку начнуть пихать код определения даты видеокарты для какого-нибудь Ultra Sparc'а. И с тестированием всего этого будет плоховато.

mky ★★★★★ ()

На фиг не надо. Ты приходишь к systemd, точнее, его пути.

DeadEye ★★★★★ ()

Сегодня моя фамилия -- Очевидность

POSIX

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

При чем здесь инферно? Если то, что она может работать как гостевая, то тогда jvm тоже можно использовать как libos.

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

то тогда jvm тоже можно использовать как libos

Бинго! Собственно, независимость от ОС и архитектуры — их основная фича.
Библиотекой ты подобное всё равно не сделаешь.

quantum-troll ★★★★★ ()

Нужно создать библиотеку libos

Или осилить autotools

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

http://<ссылка на тред о том как libos портировали на 42-ю платформу>

anonymous ()

Почему до сих пор нет libos?

А почему ТЫ до сих пор не написал libos и не выложил на github/bitbucket/sf?

init_6 ★★★★★ ()

В какой-то теме недавно уже предлагали в подобных случаях SNMP.
Тред не читал.

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

а другое дело, когда в библиотку начнуть пихать код определения даты видеокарты для какого-нибудь Ultra Sparc'а

Это всё будет окружено #ifdef ultrasparc и, если у тебя MIPS, то лишнего ты не соберёшь.

CYB3R ★★★★★ ()

Чёй-та мне говорит, что там дело не только в такой библиотеке. Даже простой бинарник Hello, word будет разным у винды и *nix.

А если ты за исходники, то определить тип ОС в коде поможет boost: http://sourceforge.net/p/predef/wiki/OperatingSystems/

Kroz ★★★★★ ()

Есть же posix. Ну и бусты всякие тоже про это.

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

Ну так никто не портанул толком - технически, никаких ограничений нет. Те же pthreads, если с модулем ярда пускать практически 1 в 1 по функционалу.

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

Я не про объём бинарного кода в скомпилированной либе, а про объём исходного кода, который специфичен для определённой платформы. Если не найдётся желающего тестить такой код, то, либо его выкидывать, либо указывать, что не протестировано. И получится, что у libos всё хорошо с linux + x86, а чуть в сторону, у уже не так хорошо.

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

Ну, много разного специфического железа есть. Почему бы не протестировать на всём?

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

fork в винде полноценно не сделать. Будет медленный костлыль в любом случае.

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

Дык речь же не о скорости, а о портабельности :)

Я не в теме, но таки интересно, почему не сделать быстрый форк в винде? Можно пару ссылок потеме?

pon4ik ★★★★★ ()

наверно по тому, что и нет единой теории всего, это очень не просто :) а еще в денег не хватает на исследования.

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

Ну, просто в линуксе fork — это «дешёвая» операция, а в венде дорогая. Или как-то так.

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

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

Хотя возможно я не знаю каких то деталей, вот и спрашиваю - проводил ли кто то техническое исследование, или все удовлетворились тем, что cygwin'у было влом ?:)

pon4ik ★★★★★ ()

Упоминают Qt, но это всё же языкозависимый специфичный код. А вот чтобы системный софт писать - оно не годится.

Так что ТС! Я одобряю твою задумку и пользовался бы такой библиотекой. Не слушай про systemd, потому что оно говно и контрпример, к тому же непортабельный вне-Linux.

Благословляю CYB3R-а на написание такой библиотеки. Без шуток, это очень умная мысль и идея вообще.

Сделай это модульным, типа libos-users и libos-что-то-еще, не будь таким как пердун поттерингю

I-Love-Microsoft ★★★★★ ()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)

У нас было такое. Тот еще гемморой. wine юзай лучше :D

vasily_pupkin ★★★★★ ()

У меня со словом «libos» ассоциируется понятие экзоядра. Но чтобы полная абстракци для ОС...

Например, нужно опросить систему по оборудованию, процессам, пользователям...

Так, и какие характеристики есть у процесса? А у пользователя? А у оборудования? Винда потому и не соответствует POSIX, что там базовые концепции, которыми оперирует ОС, не сводятся к тем, которые использует POSIX.

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

подобного поведения по идее можно добиться с помощью ReadProcess/WriteProcess

Так она потому и дорогая, что copy-on-write для памяти нативно не поддерживается. Форк, конечно, сделать можно, но только с полной копией памяти процесса, что занимает много времени.

Хотя я слышал, что в ядре NT есть или была возможность дёшево форкнуть процесс. Специально для Interix.

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

proud_anon ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

Благословляю CYB3R-а на написание такой библиотеки.

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

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

Я решаю это при помощи qmake и #ifdef Q_OS_WIN и прочими - вполне просто и удобно.

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от proud_anon

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

Если можно не на сорцы, а так что бы в 2ух словах?:)

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

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

А, всё, осознал, т.е. загвоздка в cow, для форкнутого процесса?

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

Нее, просто не понимаю, что концептуально мешает имея полный контроль над памятью, сделать ту память copy on write, после вызова опеределённой ядерной функи.

Эх, жаль мои познания в области офтопикового ядра покрылись таким толстым слоем пыли :)

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

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

Вот только составить списочек таковых, та ещё задачка :)

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

Как это fork не нужен? Да софта столько с ним. nginx, postgresql, redis и пр. и пр.

anonymous ()

слава кэпу!

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

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

Я ж про ядрёный уровень, как это сделанно в pthreads(Pthreads-w32), например. Что бы cancelation points запилить.

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

Вообщем интересно, беседы для, но не запила ради :)

pon4ik ★★★★★ ()

Ненужно. Это будет очень большая и убогая либа.

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