far2l как почему что внутри - akruphi/far2l GitHub Wiki
Текст не претендует на полноту и может содержать неточности - пинайте в телеграм-чате https://t.me/far2l_ru , если что поправить.
@elfmz, основной разработчик форка far2l, приводит следующие причины:
-
Кодовая база: Версия 2 имела меньшую кодовую базу, что упрощало модификацию. Например,
filelist.cpp
в версии 2.0.1825 содержал 5014 строк, в то время как в версии 3.0.4700 — 8760 строк. - Lua: @elfmz не был знаком с языком программирования Lua, который активно использовался в 3 версии, и ему требовался работающий фар как можно быстрее.
- Скриптинг в Linux: В Linux уже существует множество инструментов для скриптинга, поэтому основной акцент был сделан на создание простого и эффективного инструмента, а не на добавление функционала скриптинга.
- Кроссплатформенность: Переделка Far Manager для поддержки разных платформ потребовала бы значительных усилий, больше, чем просто адаптация для Linux.
- Обратная совместимость: Модификация Far Manager под Linux, даже если бы она была основана на 3 версии, всё равно нарушила бы обратную совместимость с основным проектом.
- Разработка оригинального продукта: Если бы команда разработчиков оригинального Far Manager присоединилась к проекту, это могло бы замедлить разработку оригинального продукта, так как внимание было бы сосредоточено на кроссплатформенности.
-
https://forum.farmanager.com/viewtopic.php?p=139821#p139821 (
Mon 08 Aug, 2016
- сообщение elfmz на форуме far о рождении far2l)[нажмите для просмотра цитат]
Немного инфы как я ЭТО сделал: во первых написал прослойку эмуляции части виндовых АПИ, в особенности консоли. Консоль рисуется на окошке, созданном wxwidgets (от нативной линуховой консоли я сразу отказался - от нее все беды mc). Прослойка так же включает в себя некоторые функции работы с реестром и кодировками (последнее целиком выдрал из wine). Ну и подсадив фар на эту прослойку + каленым железом вырезал все очень виндоспецифичное (типа работа с виндовой сетью, списки процессов etc) в результате получил чтото запускающееся.
Да. Форкнулся из того что называется before_3.0_split: https://sourceforge.net/p/farmanager/code/HEAD/tree/tags/before_3.0_split/ потому что в более свежих исходников каленым железом вырезать пришлось бы еще больше и не факт что результат после этого получится бы лучше.
-
https://www.opennet.ru/opennews/art.shtml?num=56492 (см. коммент elfmz от
16:20, 19/01/2022
) -
https://github.com/elfmz/far2l/issues/1248#issuecomment-1039240046
-
https://github.com/elfmz/far2l/issues/1312#issuecomment-1099480022
- https://github.com/elfmz/far2l/issues/215#issuecomment-263349285
- https://github.com/elfmz/far2l/issues/215#issuecomment-444461982
-
Отличие Linux/Unix от Windows в том, что даже на одной и той же архитектуре (не говоря уже про отличия x86/x86-64/arm/... или little-endian и big-endian) заранее нет гарантий, что везде одна и та же совместимая версия системной стандартной библиотеки C (
libc
), поэтому просто бинарник может не подойти. -
Например, portable-сборки far2l специально собираются с старым
libc
и тянут с собой собственный загрузчик и свою версиюlibc
. -
Часть плагинов уже идёт внутри far2l. Внешние C/C++ плагины компилить не обязательно — можно попробовать взять бинарники от авторов или из мелкой нарезки от https://download.opensuse.org/repositories/home:/viklequick/ (там есть под разные системы) и положить внутрь far2l. Если они собраны на системе с той же libc, то должны подхватится без проблем.