vitus_wagner: My photo 2005 (Default)
vitus_wagner ([personal profile] vitus_wagner) wrote2011-03-10 01:31 pm

Про зловредную libreadline

У [livejournal.com profile] beldmit в журнале обсуждают злобных дебиановцев, которые собрали psql без libreadline потому что readline-вская GPL несовместима с OpenSSL-евской лицензией.

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

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

Давно бы написали такую универсальную запускалку для программ с собственной командной строкой, с которой можно было бы запускать хоть ftp, хоть оракловый sql-плюс. Ну там пришлось бы правила completion-а для каждого такого приложения отдельно описывать. Но вообще-то много где их и так расширяемым делать приходится.

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

Upd оказывается, полезная программа rlwrap существует. А я и не знал. Надо постгресовским мейнтейнерам предложить вместо всяких глючных libedit просто заворачивать psql в скрипт, запускающий его через rlwrap.

[identity profile] beldmit.livejournal.com 2011-03-10 10:34 am (UTC)(link)
Слушай, а давай немножко разовьем логику лицензий?

Мне кажется, еще не создана лицензия, которая позволит часть функций вызывать только из GPL-ного кода, а часть - только из коммерческого. И с параметрами вызова функций тоже открывается простор для фантазии.
ext_605364: geg MOPO4 (Default)

[identity profile] gegmopo4.livejournal.com 2011-03-10 10:36 am (UTC)(link)
А rlwrap не оно?

[identity profile] kouzdra.livejournal.com 2011-03-10 10:41 am (UTC)(link)
И почему-то ни до кого до сих пор не доперло, что вообще-то GPL запрещает что-то с чем-то линковать, но не запрещает запускать как субпроцесс программы с какой угодно лицензией и общаться с ними через пайп, псевдотерминал или что угодно.

Это, кстати, спорный вопрос.
ext_605364: geg MOPO4 (Default)

[identity profile] gegmopo4.livejournal.com 2011-03-10 10:49 am (UTC)(link)
А насчёт зловредности -- так это OpenSSL зловредная, раз запрещает её линковать с libreadline.

[identity profile] http://users.livejournal.com/_slw/ 2011-03-10 11:12 am (UTC)(link)
debian -- это религия.
не поможет
avysk: (Default)

[personal profile] avysk 2011-03-10 11:29 am (UTC)(link)
Ещё есть ledit.

[identity profile] nec-p1us-u1tra.livejournal.com 2011-03-10 11:34 am (UTC)(link)
И не только rlwrap. Я для ocaml'овского cli помнится использовал что-то на окамле и написанное.

[identity profile] potan.livejournal.com 2011-03-10 11:49 am (UTC)(link)
Таких программок вагон и маленькая тележка.
Но меня они не устраивают по двум пунктам.
Комплетишен они не умеют и их сложно ему научить.
Если оборачиваемая ими программа запускает другие, так же работающие со стандартными вводом/выводом, но истории их смешиваются.
Из-за этого я воевал в окамловской рассылке, даже пач им прислал, позволяющий подобные библиотеки цеплять, но они от своего ledita отказаться не могут. Больше я OCaml стараюсь не использовать, благо есть куча приличных языков с нормальным REPLом.

[identity profile] potan.livejournal.com 2011-03-10 03:04 pm (UTC)(link)
Ну там пришлось бы правила completion-а для каждого такого приложения отдельно описывать.

И учить ее имена таблиц и встроенных функций данного psql вытаскивать.

[identity profile] paracloud.livejournal.com 2011-03-10 06:11 pm (UTC)(link)
Хмм, берем язык, который поддерживает метафору динамического связывания через передачу сообщений. Питон там какой или Objective-C. Заворачиваем его вокруг socket или ещё какого message based IPC. Наворачиваем этот интерфейс вокруг readline и используем в проприетарной программе через distributed objects или тому подобный IPC.

Что скажет дух закона FSF на такую линковку?

[identity profile] mithraen.livejournal.com 2011-03-12 11:38 pm (UTC)(link)
А не проще ли в этом конкретном случае вынести в отдельный процесс таки работу с SSL?