Архив. Новости и комментарии

   Новости и Комментарии. 15 января - 21 января

  KSI Linux и русификация.

Сегодняшний комментарий посвящен выходящему вскоре KSI Linux 2.0 (Nostromo). Предупредим сразу: мы будем жестко критиковать методы русификации Linux, выбранные  автором KSI  Сергеем Кубучиным. Наше мнение стало известно ему более недели назад, но полученный ответ не был конструктивным. С дистрибутивом  уже сейчас работают многие российские и украинские пользователи. Мы в свое время не изучив внимательно бета-версию KSI ,  назвали его правильно русифицированным . Приносим  глубокие извинения своим читателям и считаем необходимым высказаться сейчас. Если в Nostromo что-либо принципиально измениться, - мы обязательно сообщим об этом.

Перевод  сообщений программ и  документации на русский - только одна, хотя и очень важная сторона русификации. С этой точки зрения, KSI 2.0 - большой шаг вперед. KSI - один из двух (второй - Black Cat Леона Кантера) русско-украинских дистрибутивов Linux.  Открытое ядро Urbansoft, Red Hat 5.2 от фирмы Vinchi, наш Mandrake 5.2 Russian Edition и другие - это все же международные дистрибутивы Linux с русификацией. Что правильнее - создавать национальный дистрибутив (как KSI) или стремиться интегрировать русификацию в дистрибутивы международные - отдельный вопрос, сейчас мы его поднимать не будем. Обратимся к рассмотрению компонентов русификации KSI - кодировке, locale, русификации X и приложений.

Кодировка или точнее, charset, используемый в Nostromo, называется KOI8-R. Сharset этот вы можете найти, как всегда,  в файле /usr/share/i18n/charset/KOI8-R :
----------cut----------
<code_set_name> KOI8-R
<comment_char> %
<escape_char> /
%version: 1.0
%repertoiremap: mnemonic,ds
% source: RFC1489 via Gabor Kiss <kissg@sztaki.hu>
% and Andrey A. Chernov <ache@astral.msk.su>
% and Serguei I. Koubouchine <ksi@ksi-linux.com>
----------cut-----------
%<Dr>      /xA4   <U2553> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
<ie>       /xA4   <U0454> CYRILLIC SMALL LETTER UKRAINIAN IE
<DR>       /xA5   <U2554> BOX DRAWINGS DOUBLE DOWN AND RIGHT
%<dL>      /xA6   <U2555> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
<ii>       /xA6   <U0456> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIANI
%<Dl>      /xA7   <U2556> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
----------cut------------

Нетрудно видеть, что это не KOI8-R и не RFC1489. В charset введены четыре украинские буквы  вместо символов псевдографики. Интересно. что  в апреле 1998 года была принята украинская кодировка KOI8-U (RFC2319) , которая отличается от KOI8-R именно этими четырьмя буквами (восемью символами).

Последствия, к которым приведет использование  KOI8-R по KSI  нетрудно предвидеть. Так как в locale ru_SU (и ru_RU) содержатся украинские и другие кириллические символы, то  к буквам окажутся причислены  8 символов псевдографики настоящего KOI8-R, что может явиться весьма неприятным сюрпризом  как для программистов, так и для пользователей.  Почему эта кодировка не названа KOI8-U? Почему KOI8-U вообще нет  в Nostromo? locale ru_SU в KSI 2.0 отличается от входящей в glibc2, она исправлена г-ном Кубучиным. В качестве десятичного разделителя используется точка, а в качестве валюты - американский доллар. Отдавая должное юмору  автора в последнем случае, заметим, что десятичную запятую у нас не отменили. Может быть, ее отменили на Украине? Нет, в Linux Ukrainian Howto Дениса Дмитриенко приведены locale uk_UA и  ru_UA, в которых оставлена запятая. Нужно ли менять стандарты, даже если они не нравятся?

Можно ли  назвать такой дистрибутив русским?  Вряд ли. В нем не только нет откомпилированной locale, соответствующей ru_RU.KOI8-R, в нем даже попытка создать такую locale при помощи localedef обычным для _всех_  других дистрибутивов  способом, приведет к неверному результату.

Можно ли назвать  такой дистрибутив украинским? Без  charset  KOI8-U ?  Без locale uk_UA?

Заметим, однако, что  эти, на наш взгляд, несуразности, отчасти можно вылечить средствами, имеющимися в KSI. По крайней мере, KOI8-R(KSI) - это KOI8-U(поправьте меня, если не так - я не нашел отличий), а настоящая KOI8-R приведена под именем KOI8-R.rulocale. Достаточно их откомпилировать. Правда, с украинским языком будет посложнее...

Уважаемый читатель! Мы, наверняка, утомили вас всеми этими KOI8-*, но, что поделаешь, столько уж для нас придумали кодировок. Мы в первый раз, правда, сталкиваемся с тем, чтобы на них надевали маски.

Дальше, однако, мы расскажем об особенностях русификации "по KSI", которые исправить сложнее, потому что закопаны они глубже. Речь идет о русификации X Window System.

Напомним, что существует два метода обеспечить ввод кириллических (равно как и китайских. еврейских, греческих и  пр.) букв в X: старый и новый, xmodmap и Xkb. Первый метод признает только обднобайтовые символы и не позволяет, таким образом, определить, буквы какого алфавита используются. Он обладает рядом неприятных особенностей (в нелатинском регистре не работают CTRl-*,  при запирании экрана нельзя переключить регистр).  На  процедурах, оставшихся от этого метода, работают такие знаменитые программы как xrus и kikbd. Этот "неправильный" метод  описан в Cyrillic Howto и применяется почти  во всех предлагаемых пакетах русификации, исключая наши и, как мы считали, KSI Linux. На этом же методе основана украинизация X, предлагаемая в The Linux Ukrainian Howto.

Другой метод - "передовой", - xkb.  При вводе символы кодируются двухбайтной последовательностью и  прикладная программа может выяснить, символ какого алфавита введен. Этот способ используют очень многие программы, а некоторые - в  полном объеме, например, Netscape.  Netscape для glibc2 настолько любит этот метод и учитывает locale, что просто не даст вам ввести  символ, несоответствующий  locale (и Xlocale).  Star Office также использует xkb, но так как версии, поддерживающие языки, отличные от тех, которым хватает Latin-1, еще не написаны, то он не даст ввести русские, например, буквы, если его не обмануть. Заметим, что  серьезные проблемы возникают только с коммерческими программами, так как остальные несложно, как правило, подправить (см. страницу  А.Чернова).

Если посмотреть на программы, входящие в   KSI Linux, то можно отметить, что  почти все они благополучно работают с xkb. Исключение составляют Lyx и несколько вариантов xterm (rxvt, например). Что касается Lyx, то у него свой, довольно странный,  способ ввода  символов и. описав для него русскую клавиатуру, можно вводить русский текст (хотя и не очень удобно - перключаясь кнопкой Pause). Пакет русификации Klyx (для Lyx - то же самое), можно найти на нашей странице Software. Необученность же rxvt исправить совсем несложно, что, впрочем, уже сделано в Debian 2.0.

Казалось бы, что можно использовать xkb. Можно и xruskb (kikbd), тем более, что оба они входят в Nostromo. Но не тут то было...

Как  мы уже говорили, Xkb передает прикладной программе двухбайтовый код. Это - внутренняя кодировка X, она находится в файле /usr/X11R6/include/X11/keysymdef.h. Именно этот файл и исправлен в KSI!  Вы, наверное, уже догадались как: кирилические символы, имеющие  старший байт 6, помещены на место Latin-1 (старший байт - 0).

Вот фрагмент оригинального keysymdef.h:
---------cut-------------
#define XK_Cyrillic_YU     0x6e0
#define XK_Cyrillic_A      0x6e1
#define XK_Cyrillic_BE     0x6e2
#define XK_Cyrillic_TSE    0x6e3
#define XK_Cyrillic_DE     0x6e4
#define XK_Cyrillic_IE     0x6e5
---------cut-------------
А вот - он же из KSI:
---------cut-------------
#define XK_Cyrillic_YU     0x0e0
#define XK_Cyrillic_A      0x0e1
#define XK_Cyrillic_BE     0x0e2
#define XK_Cyrillic_TSE    0x0e3
#define XK_Cyrillic_DE     0x0e4
#define XK_Cyrillic_IE     0x0e5
---------cut-------------

Это мало чем отличается от пресловутого метода "xmodmap"  по сути, но зарыто весьма глубоко и, как и все игры с кодировками, может привести к грустным последствиям. Каким?

Во-первых, установив единожды KSI, вы сможете получать последующие версии XFree только от KSI . XFree от XFree86.org откажется русифицироваться/украинизироваться по KSI. Во-вторых, написанная вами программа, исправно вводящая русские/украинские буквы под KSI может отказаться это делать под любым другим дистрибутивом. И наоборот.  KSI - единственный  (по крайней мере, из известных нам) дистрибутив Linux, который позволил себе столь глубокий хак XFree. В -третьих, Netscape для glibc2 (а KSI -- glibc2-дистрибутив) откажется вводить русские  буквы без насилия,  хотя он прекрасно работает в нормальных условиях.  Netscape тоже придется брать от KSI.

Кстати, о Netscape. В KSI  входит версия 4.07 для libc5. Для успешной работы с различными украинскими кодировками исправлен исполняемый файл Netscape. Интересно, что  такие рецепты  насилия над Netscape можно встретить на некоторых русских сайтах , но на украинских - нет! Несмотря на то, что фирма не поддерживает пока KOI8-U, украинские линуксоиды поступают с Netscape   честно  и работают над украинизацией Mozilla. Здесь (и не только здесь) нам есть чему  у них поучиться.

Назовем вещи своими именами. В дистрибутиве KSI 2.0 размываются стандарты как национальные (и российские, и украинские), так и международные. Это первый дистрибутив Linux, который действительно несовместим с другими. Это первый случай регулярной подмены названия кодировки. Но это и  самый первый самостоятельный  русскоязычный дистрибутив Linux. Это первый  русскоязычный дистрибутив Linux, имеющий  поддержку со стороны государства (украинского, конечно).

В Советском Союзе был богатый опыт превращения чужих операционных систем в "свои",  имевшие  ограниченную совместимость с оригиналом. Неужели мы хотим это повторить?  То, о чем писал сотрудник Microsoft Vinod Vallopillil , причудливым образом отбразилось у нас. Halloween V -- по-советски?

      Пишите.
      AEN

|Начало|Комментарии|
 © IPLabs Linux Team , 1999 , 1998 Использование материалов═ разрешается только со ссылкой═ на═ первоисточник.