rms-lisp.html - en to ru translation catalogue (67 entries)

note: type: Content of: <title>
en: My Lisp Experiences and the Development of GNU Emacs - GNU Project - Free Software Foundation
ru: Мой опыт работы с Лиспом и развитие GNU Emacs - Проект GNU - Фонд свободного программного обеспечения

note: type: Content of: <div><h2>
en: My Lisp Experiences and the Development of GNU Emacs
ru: Мой опыт работы с Лиспом и развитие GNU Emacs

note: type: Content of: <div><div><p>
en: Transcript of Richard Stallman's speech at the International Lisp Conference, 28 Oct 2002.
ru: Запись речи Ричарда Столмена на Международной конференции по Лиспу, 28 октября 2002.

note: type: Content of: <div><p>
en: Since none of my usual speeches have anything to do with Lisp, none of them were appropriate for today. So I'm going to have to wing it.  Since I've done enough things in my career connected with Lisp I should be able to say something interesting.
ru: Поскольку ни одна из моих обычных речей не имеет никакого отношения к Лиспу, ни одна из них не подходит для сегодняшнего выступления. Так что мне придется импровизировать. Поскольку в своей профессиональной деятельности мне доводилось выполнять довольно много работы, связанной с Лиспом, у меня, должно быть, есть что порассказать.

note: type: Content of: <div><p>
en: My first experience with Lisp was when I read the Lisp 1.5 manual in high school. That's when I had my mind blown by the idea that there could be a computer language like that. The first time I had a chance to do anything with Lisp was when I was a freshman at Harvard and I wrote a Lisp interpreter for the <abbr title="Programmed Data Processor">PDP</abbr>-11. It was a very small machine&mdash;it had something like 8k of memory&mdash;and I managed to write the interpreter in a thousand instructions. This gave me some room for a little bit of data. That was before I got to see what real software was like, that did real system jobs.
ru: Моя первая встреча с Лиспом произошла, когда я прочел руководство по Лисп&nbsp;1.5 в старших классах. Именно тогда меня поразила идея, что может быть такой язык программирования. Возможность сделать что-нибудь на Лиспе впервые появилась у меня, когда я был на младших курсах в Гарварде и писал интерпретатор Лиспа для PDP-11. Это была очень маленькая машина&nbsp;&mdash; в ней было что-то вроде 8k памяти,&mdash; и мне удалось написать интерпретатор длиной в тысячу команд. Это оставляло мне немного места для данных. Это было до того, как я узнал, как выглядят настоящие программы, которые выполняют настоящие системные задачи.

note: type: Content of: <div><p>
en: I began doing work on a real Lisp implementation with JonL White once I started working at <abbr title="Massachusetts Institute of Technology">MIT</abbr>. I got hired at the Artificial Intelligence Lab not by JonL, but by Russ Noftsker, which was most ironic considering what was to come&mdash;he must have really regretted that day.
ru: Я начал выполнять работы над настоящей реализацией Лиспа с Джоном-Л Уайтом, как только я начал работать в Массачусетском техническом институте. Туда меня принял не Джон-Л, а Расселл Нофтскер, что было в высшей степени парадоксально, если учесть то, что случилось впоследствии&nbsp;&mdash; он, должно быть, сильно об этом пожалел.

note: type: Content of: <div><p>
en: During the 1970s, before my life became politicized by horrible events, I was just going along making one extension after another for various programs, and most of them did not have anything to do with Lisp. But, along the way, I wrote a text editor, Emacs. The interesting idea about Emacs was that it had a programming language, and the user's editing commands would be written in that interpreted programming language, so that you could load new commands into your editor while you were editing. You could edit the programs you were using and then go on editing with them. So, we had a system that was useful for things other than programming, and yet you could program it while you were using it. I don't know if it was the first one of those, but it certainly was the first editor like that.
ru: В семидесятые годы XX&nbsp;века, до того, как моя жизнь политизировалась в результате ужасных событий, я просто делал одно расширение различных программ за другим, и большинство из них не имело никакого отношения к Лиспу. Но попутно я писал текстовый редактор, Emacs. Интересная мысль, заложенная в Emacs, состояла в том, что в нем был язык программирования, и пользовательские команды редактирования писались на этом интерпретируемом языке программирования, так что во время редактирования в редактор можно было загружать новые команды. Можно было подредактировать программы, которыми пользуешься, а потом продолжать редактировать ими. Итак, у нас была система, полезная не для программирования, и все-таки во время пользования ею можно было программировать. Я не знаю, была ли это первая такая система, но это определенно был первый такой редактор.

note: type: Content of: <div><p>
en: This spirit of building up gigantic, complicated programs to use in your own editing, and then exchanging them with other people, fueled the spirit of free-wheeling cooperation that we had at the AI Lab then. The idea was that you could give a copy of any program you had to someone who wanted a copy of it. We shared programs to whomever wanted to use them, they were human knowledge. So even though there was no organized political thought relating the way we shared software to the design of Emacs, I'm convinced that there was a connection between them, an unconscious connection perhaps. I think that it's the nature of the way we lived at the AI Lab that led to Emacs and made it what it was.
ru: Эта атмосфера построения гигантских, сложных программ для применения в своем собственном редактировании, а затем обмена ими с другими людьми, питала дух нестесненного сотрудничества, который царил тогда в Лаборатории искусственного интеллекта. Идея была в том, что можно передать копию программы, которая у тебя есть, тому, кому она нужна. Мы обменивались программами со всеми, кто только хотел ими пользоваться, программы были человеческим знанием. Так что, хотя и не было организованной политической мысли, связывающей то, как мы обменивались программами, с устройством Emacs, я убежден, что между ними была связь&nbsp;&mdash; возможно, неосознанная. Я думаю, что именно природа нашего образа жизни в Лаборатории искусственного интеллекта привела к созданию Emacs и сделала его таким, каким он был.

note: type: Content of: <div><p>
en: The original Emacs did not have Lisp in it. The lower level language, the non-interpreted language&mdash;was PDP-10 Assembler. The interpreter we wrote in that actually wasn't written for Emacs, it was written for <abbr title="Text Editor and COrrector">TECO</abbr>. It was our text editor, and was an extremely ugly programming language, as ugly as could possibly be. The reason was that it wasn't designed to be a programming language, it was designed to be an editor and command language. There were commands like <code>5l</code>, meaning <code>move five lines</code>, or <code>i</code> and then a string and then an ESC to insert that string. You would type a string that was a series of commands, which was called a command string. You would end it with ESC ESC, and it would get executed.
ru: В первоначальном Emacs Лиспа не было. Языком низкого уровня&nbsp;&mdash; неинтерпретируемым языком&nbsp;&mdash; был ассемблер PDP-10. Интерпретатор, который мы писали, на самом деле писался не для Emacs, он писался для TECO&nbsp;<a href="#tf1">(1)</a>. Это был наш текстовый редактор и крайне уродливый язык программирования, настолько уродливый, насколько это только возможно. Причина была в том, что он не был спроектирован как язык программирования, он был спроектирован как язык редактора и команд. Были такие команды, как <code>5l</code>, что означало <code>передвинуться на пять строк</code>, или <code>i</code> с последующим текстом и <kbd>ESC</kbd> для того, чтобы вставить этот текст. Можно было набрать строку, которая была последовательностью команд, это называлось командной строкой. Она завершалась символами <kbd>ESC</kbd> <kbd>ESC</kbd>, и тогда последовательность выполнялась.

note: type: Content of: <div><p>
en: Well, people wanted to extend this language with programming facilities, so they added some. For instance, one of the first was a looping construct, which was <code>&lt;&nbsp;&gt;</code>. You would put those around things and it would loop. There were other cryptic commands that could be used to conditionally exit the loop.  To make Emacs, we&#8239;<a href="#foot-1">[1]</a> added facilities to have subroutines with names. Before that, it was sort of like Basic, and the subroutines could only have single letters as their names. That was hard to program big programs with, so we added code so they could have longer names. Actually, there were some rather sophisticated facilities; I think that Lisp got its unwind-protect facility from TECO.
ru: Ну, люди хотели дополнить этот язык средствами программирования, так что они добавили некоторые такие средства. Например, одной из первых была добавлена конструкция цикла, это были <code>&lt;</code> <code>&gt;</code>. Ими окружали команды, и это был цикл. Были другие непонятные команды, которыми можно было пользоваться для условного выхода из цикла. При создании Emacs мы&nbsp;<a href="#foot-1">[1]</a> добавили возможность создания подпрограмм с именами. До того это было вроде Бейсика, в именах подпрограмм могло быть только по одной букве. Писать на этом большие программы было трудно, так что мы дописали программу, чтобы у них могли быть более длинные имена. На самом деле там были довольно замысловатые средства; по-моему, средство &ldquo;unwind-protect&rdquo; Лисп заимствовал из TECO.

note: type: Content of: <div><p>
en: We started putting in rather sophisticated facilities, all with the ugliest syntax you could ever think of, and it worked&mdash;people were able to write large programs in it anyway. The obvious lesson was that a language like TECO, which wasn't designed to be a programming language, was the wrong way to go. The language that you build your extensions on shouldn't be thought of as a programming language in afterthought; it should be designed as a programming language. In fact, we discovered that the best programming language for that purpose was Lisp.
ru: Мы начали закладывать довольно замысловатые средства, и у всех у них был уродливейший синтаксис, какой только можно придумать, и это работало&nbsp;&mdash; люди все равно были в состоянии писать на этом крупные программы. Очевидным уроком было то, что такой язык, как TECO, который не был спроектирован как язык программирования,&mdash; это был неверный путь. Язык, на котором вы строите свои расширения, должен задумываться как язык программирования не задним числом; его следует проектировать как язык программирования. Фактически, мы обнаружили, что лучшим языком программирования для этих целей был Лисп.

note: type: Content of: <div><p>
en: It was Bernie Greenberg, who discovered that it was&#8239;<a href="#foot-2">[2]</a>.  He wrote a version of Emacs in Multics MacLisp, and he wrote his commands in MacLisp in a straightforward fashion. The editor itself was written entirely in Lisp. Multics Emacs proved to be a great success&mdash;programming new editing commands was so convenient that even the secretaries in his office started learning how to use it. They used a manual someone had written which showed how to extend Emacs, but didn't say it was a programming. So the secretaries, who believed they couldn't do programming, weren't scared off. They read the manual, discovered they could do useful things and they learned to program.
ru: Это открыл Берни Гринберг&nbsp;<a href="#foot-2">[2]</a>. Он написал версию Emacs на MacLisp в Multics, и он писал свои программы на MacLisp прямолинейным манером. Сам редактор был полностью написан на Лиспе. Emacs для Multics имел большой успех&nbsp;&mdash; программирование новых команд редактирования было таким удобным, что даже секретарши в его конторе начали учиться пользованию им. Они пользовались руководством, которое кто-то написал и в котором было показано, как дополнять Emacs, но там не говорилось, что это программирование. Так что секретарш, которые думали, что не могут программировать, это не отпугивало. Они читали руководство, обнаруживали, что могут делать что-то полезное, и учились программировать.

note: type: Content of: <div><p>
en: So Bernie saw that an application&mdash;a program that does something useful for you&mdash;which has Lisp inside it and which you could extend by rewriting the Lisp programs, is actually a very good way for people to learn programming. It gives them a chance to write small programs that are useful for them, which in most arenas you can't possibly do. They can get encouragement for their own practical use&mdash;at the stage where it's the hardest&mdash;where they don't believe they can program, until they get to the point where they are programmers.
ru: Так что Берни понял, что приложение&mdash; программа, которая делает что-то полезное для вас&nbsp;&mdash; внутри которого был Лисп и которое вы можете дополнять, переписывая программы на Лиспе,&mdash; на самом деле очень хороший способ научиться программировать. Это дает людям возможность писать небольшие программы, которые для них полезны, чего в большинстве областей вы, наверное, не можете. Они могут получать поощрение от практической пользы для них самих на стадии, где это труднее всего&nbsp;&mdash; когда они не думают, что могут программировать,&mdash; пока они не дойдут до точки, в которой они уже стали программистами.

note: type: Content of: <div><p>
en: At that point, people began to wonder how they could get something like this on a platform where they didn't have full service Lisp implementation. Multics MacLisp had a compiler as well as an interpreter&mdash;it was a full-fledged Lisp system&mdash;but people wanted to implement something like that on other systems where they had not already written a Lisp compiler. Well, if you didn't have the Lisp compiler you couldn't write the whole editor in Lisp&mdash;it would be too slow, especially redisplay, if it had to run interpreted Lisp.  So we developed a hybrid technique. The idea was to write a Lisp interpreter and the lower level parts of the editor together, so that parts of the editor were built-in Lisp facilities. Those would be whatever parts we felt we had to optimize. This was a technique that we had already consciously practiced in the original Emacs, because there were certain fairly high level features which we re-implemented in machine language, making them into TECO primitives. For instance, there was a TECO primitive to fill a paragraph (actually, to do most of the work of filling a paragraph, because some of the less time-consuming parts of the job would be done at the higher level by a TECO program). You could do the whole job by writing a TECO program, but that was too slow, so we optimized it by putting part of it in machine language. We used the same idea here (in the hybrid technique), that most of the editor would be written in Lisp, but certain parts of it that had to run particularly fast would be written at a lower level.
ru: В этот момент люди начали размышлять, как получить что-то вроде этого на платформе, где у них не было полнофункциональной реализации Лиспа. У MacLisp для Multics был как компилятор, так и интерпретатор&nbsp;&mdash; это была полностью оснащенная система Лисп&nbsp;&mdash; но люди хотели реализовать что-то подобное на других системах, где у них не было уже написанного компилятора Лиспа. Ну, если у вас нет компилятора Лиспа, вы не можете написать весь редактор на Лиспе&nbsp;&mdash; он был бы слишком медленным, особенно перерисовка, если бы пришлось выполнять Лисп на интерпретаторе. Так что мы разработали гибридную технику. Идея состояла в том, чтобы писать интерпретатор Лиспа и низкоуровневые части редактора вместе, так что части редактора были встроенными средствами Лиспа. Это были бы любые части, в оптимизации которых мы ощущали необходимость. Это была техника, которую мы уже сознательно практиковали в первоначальном Emacs, потому что были определенные весьма высокоуровневые функции, которые мы перереализовали на машинном языке, переделав их в примитивы TECO. Например, был примитив TECO для заполнения абзаца (на самом деле для основной работы по заполнению абзаца, потому что некоторые из наименее ресурсоемких частей работы выполнялись на более высоком уровне программой TECO). Можно было выполнять всю работу, написав программу на TECO, но она была слишком медленной, так что мы оптимизировали ее, перенеся часть ее на машинный язык. Здесь (в гибридной технике) мы воспользовались той же идеей: большая часть редактора будет написана на Лиспе, но определенные его части, которые нужно было выполнять особенно быстро, будут написаны на низком уровне.

note: type: Content of: <div><p>
en: Therefore, when I wrote my second implementation of Emacs, I followed the same kind of design. The low level language was not machine language anymore, it was C. C was a good, efficient language for portable programs to run in a Unix-like operating system. There was a Lisp interpreter, but I implemented facilities for special purpose editing jobs directly in C&mdash;manipulating editor buffers, inserting leading text, reading and writing files, redisplaying the buffer on the screen, managing editor windows.
ru: Таким образом, когда я писал свою вторую реализацию Emacs, я следовал такого же рода схеме. Язык низкого уровня больше не был машинным языком, это был Си. Си был хорошим, эффективным языком для переносимых программ, предназначенных для выполнения в операционной системе типа Unix. Там был интерпретатор Лиспа, но я реализовал средства для решения специальных задач редактирования прямо на Си&nbsp;&mdash; сюда входили манипуляция буферами редактора, вставка текста в начало, чтение и запись файлов, перерисовка буфера на экране, управление окнами редактора.

note: type: Content of: <div><p>
en: Now, this was not the first Emacs that was written in C and ran on Unix. The first was written by James Gosling, and was referred to as GosMacs. A strange thing happened with him. In the beginning, he seemed to be influenced by the same spirit of sharing and cooperation of the original Emacs. I first released the original Emacs to people at MIT. Someone wanted to port it to run on Twenex&mdash;it originally only ran on the Incompatible Timesharing System we used at MIT. They ported it to Twenex, which meant that there were a few hundred installations around the world that could potentially use it. We started distributing it to them, with the rule that &ldquo;you had to send back all of your improvements&rdquo; so we could all benefit. No one ever tried to enforce that, but as far as I know people did cooperate.
ru: Так вот, это был не первый Emacs, написанный на Си и работавший в Unix. Первый был написан Джеймсом Гослингом, его называли GosMacs. С ним вышла странная история. Вначале он, казалось, находился под влиянием той же самой атмосферы обмена и сотрудничества первоначального Emacs. Я сначала выпускал первоначальный Emacs для людей в Массачусетском техническом институте. Кое-кто захотел перенести его на Twenex&nbsp;&mdash; сначала редактор работал только в Несовместимой системе разделения времени, которой мы пользовались в институте. Они перенесли его на Twenex, это означало, что в мире было несколько сотен вычислительных систем, в которых его потенциально можно было применять. Мы начали распространять его среди них с правилом &ldquo;вы должны присылать назад все свои улучшения&rdquo;, чтобы мы все могли извлекать из этого пользу. Никто никогда не пытался следить за соблюдением этого, но насколько я знаю, люди действительно сотрудничали.

note: type: Content of: <div><p>
en: Gosling did, at first, seem to participate in this spirit. He wrote in a manual that he called the program Emacs hoping that others in the community would improve it until it was worthy of that name. That's the right approach to take towards a community&mdash;to ask them to join in and make the program better. But after that he seemed to change the spirit, and sold it to a company.
ru: И Гослинг, на первых порах, казалось, принимал в этом участие. Он написал руководство, в котором он называл эту программу Emacs в надежде, что другие члены сообщества будут улучшать ее, пока она не заслужит этого названия. Это был верный подход к сообществу&nbsp;&mdash; просить их присоединиться и улучшать программу. Но после этого его отношение, кажется, изменилось, и он продал программу одной компании.

note: type: Content of: <div><p>
en: At that time I was working on the GNU system (a free software Unix-like operating system that many people erroneously call &ldquo;Linux&rdquo;).  There was no free software Emacs editor that ran on Unix. I did, however, have a friend who had participated in developing Gosling's Emacs. Gosling had given him, by email, permission to distribute his own version. He proposed to me that I use that version. Then I discovered that Gosling's Emacs did not have a real Lisp. It had a programming language that was known as &ldquo;mocklisp,&rdquo; which looks syntactically like Lisp, but didn't have the data structures of Lisp.  So programs were not data, and vital elements of Lisp were missing.  Its data structures were strings, numbers and a few other specialized things.
ru: В это время я работал над системой GNU (свободной операционной системой типа Unix, которую многие ошибочно называют &ldquo;Linux&rdquo;). Свободного редактора Emacs, который работал бы в Unix, не было. Однако был у меня знакомый, который участвовал в разработке Emacs Гослинга. Гослинг передал ему, по электронной почте, разрешение распространять его собственную версию. Он предложил мне воспользоваться этой версией. Тогда я обнаружил, что в Emacs Гослинга не было настоящего Лиспа. В нем был язык программирования, известный как &ldquo;mocklisp&rdquo;, он синтаксически выглядит как Лисп, но в нем нет структур данных Лиспа. Так что программы не были данными и не хватало жизненно важных элементов Лиспа. Его структурами данных были строки, числа и некоторые другие специализированные объекты.

note: type: Content of: <div><p>
en: I concluded I couldn't use it and had to replace it all, the first step of which was to write an actual Lisp interpreter. I gradually adapted every part of the editor based on real Lisp data structures, rather than ad hoc data structures, making the data structures of the internals of the editor exposable and manipulable by the user's Lisp programs.
ru: Я пришел к выводу, что не могу воспользоваться этим, и был вынужден заменить это все, и первым шагом было написание настоящего интерпретатора Лиспа. Я постепенно перебазировал каждую часть редактора на настоящие структуры данных Лиспа взамен написанных по случаю структур данных, создав возможность вывода внутренних структур данных редактора и манипуляций ими в пользовательских программах на Лиспе.

note: type: Content of: <div><p>
en: The one exception was redisplay. For a long time, redisplay was sort of an alternate world. The editor would enter the world of redisplay and things would go on with very special data structures that were not safe for garbage collection, not safe for interruption, and you couldn't run any Lisp programs during that. We've changed that since&mdash;it's now possible to run Lisp code during redisplay. It's quite a convenient thing.
ru: Единственным исключением была перерисовка. Долгое время перерисовка была своего рода другим миром. Редактор вступал в мир перерисовки, и все начинало проводиться над совершенно особыми структурами данных, для которых не было безопасной сборки мусора, не было безопасных прерываний, и в это время нельзя было выполнять никаких программ на Лиспе. С тех пор мы это изменили&nbsp;&mdash; сейчас можно выполнять программы на Лиспе во время перерисовки. Это очень удобно.

note: type: Content of: <div><p>
en: This second Emacs program was &ldquo;free software&rdquo; in the modern sense of the term&mdash;it was part of an explicit political campaign to make software free. The essence of this campaign was that everybody should be free to do the things we did in the old days at MIT, working together on software and working with whomever wanted to work with us.  That is the basis for the free software movement&mdash;the experience I had, the life that I've lived at the MIT AI lab&mdash;to be working on human knowledge, and not be standing in the way of anybody's further using and further disseminating human knowledge.
ru: Эта вторая программа Emacs была &ldquo;свободной программой&rdquo; в современном смысле этого слова&nbsp;&mdash; она была частью открытой политической кампании за освобождение программ. Сущность этой кампании состояла в том, что всякий должен быть волен делать то, что мы в старые времена делали в Массачусетском техническом институте, работая вместе над программами и работая со всеми, кто только желал работать с нами. Это было основой движения за свободное программное обеспечение&nbsp;&mdash; опыт моей жизни в Лаборатории искусственного интеллекта&nbsp;&mdash; работать над человеческим знанием и не стоять ни у кого на пути к дальнейшему применению и дальнейшему распространению человеческого знания.

note: type: Content of: <div><p>
en: At the time, you could make a computer that was about the same price range as other computers that weren't meant for Lisp, except that it would run Lisp much faster than they would, and with full type checking in every operation as well. Ordinary computers typically forced you to choose between execution speed and good typechecking.  So yes, you could have a Lisp compiler and run your programs fast, but when they tried to take <code>car</code> of a number, it got nonsensical results and eventually crashed at some point.
ru: В это время можно было сделать компьютер, который стоил примерно столько же, сколько другие компьютеры, не предназначенные для Лиспа, но он выполнял бы Лисп гораздо быстрее, чем они, и при этом с полной проверкой типов на каждой операции. Обычные компьютеры, как правило, вынуждали выбирать между скоростью выполнения и хорошей проверкой типов. Так что, конечно, можно было получить компилятор Лиспа и быстро выполнять программы, но когда они пытались взять <code>car</code> от числа, это приводило к бессмысленным результатам и в конце концов когда-нибудь приводило к сбою.

note: type: Content of: <div><p>
en: The Lisp machine was able to execute instructions about as fast as those other machines, but each instruction&mdash;a <code>car</code> instruction would do data typechecking&mdash;so when you tried to get the <code>car</code> of a number in a compiled program, it would give you an immediate error. We built the machine and had a Lisp operating system for it. It was written almost entirely in Lisp, the only exceptions being parts written in the microcode. People became interested in manufacturing them, which meant they should start a company.
ru: Машина-Лисп была в состоянии выполнять команды почти так же быстро, как те другие машины, но каждая команда... команда <code>car</code> выполняла проверку типов&nbsp;&mdash; так что когда вы пытались взять <code>car</code> от числа в скомпилированной программе, это немедленно давало ошибку. Мы построили машину, и у нас была для нее операционная система Лиспа. Она почти полностью была написана на Лиспе, за исключением только частей, записанных в микрокоде. Возник интерес к производству машин, это означало, что нужно создать компанию.

note: type: Content of: <div><p>
en: There were two different ideas about what this company should be like.  Greenblatt wanted to start what he called a &ldquo;hacker&rdquo; company. This meant it would be a company run by hackers and would operate in a way conducive to hackers. Another goal was to maintain the AI Lab culture&#8239;<a class="ftn" href="#foot-3">[3]</a>.  Unfortunately, Greenblatt didn't have any business experience, so other people in the Lisp machine group said they doubted whether he could succeed. They thought that his plan to avoid outside investment wouldn't work.
ru: Было два разных представления о том, какой должна быть эта компания. Гринблэтт хотел создать то, что он называл &ldquo;хакерской&rdquo; компанией. Это означало, что это была бы компания под управлением хакеров и работающая благоприятным для хакеров образом. Другой целью была поддержка культуры Лаборатории искусственного интеллекта&nbsp;<a href="#foot-3">[3]</a>. К сожалению, у Гринблэтта не было никакого делового опыта, так что другие люди из группы машины-Лиспа говорили, что они сомневаются в том, что он сможет это сделать. Они думали, что избежать внешних капиталовложений, как он планировал, не удастся.

note: type: Content of: <div><p>
en: Why did he want to avoid outside investment? Because when a company has outside investors, they take control and they don't let you have any scruples. And eventually, if you have any scruples, they also replace you as the manager.
ru: Но почему он хотел избежать внешних капиталовложений? Потому что когда у компании есть внешние вкладчики, они берут контроль в свои руки и не позволяют вам быть щепетильным; а если вы сколько-нибудь щепетильны, то они в конце концов поставят на руководящую должность кого-нибудь другого.

note: type: Content of: <div><p>
en: So Greenblatt had the idea that he would find a customer who would pay in advance to buy the parts. They would build machines and deliver them; with profits from those parts, they would then be able to buy parts for a few more machines, sell those and then buy parts for a larger number of machines, and so on. The other people in the group thought that this couldn't possibly work.
ru: Так что у Гринблэтта была мысль, что он найдет клиента, который заплатит за комплектующие вперед. Они собрали бы машины и поставили их ему; извлекая таким образом доход из этих комплектующих, они смогли бы купить комплектующие еще для нескольких машин, продать их, а потом купить комплектующие для большего числа машин и так далее. Другие люди из группы думали, что так работать не получится.

note: type: Content of: <div><p>
en: Greenblatt then recruited Russell Noftsker, the man who had hired me, who had subsequently left the AI Lab and created a successful company.  Russell was believed to have an aptitude for business. He demonstrated this aptitude for business by saying to the other people in the group, &ldquo;Let's ditch Greenblatt, forget his ideas, and we'll make another company.&rdquo; Stabbing in the back, clearly a real businessman. Those people decided they would form a company called Symbolics. They would get outside investment, not have scruples, and do everything possible to win.
ru: Гринблэтт привлек Расселла Нофтскера, человека, который нанял меня, а в последствии ушел из Лаборатории искусственного интеллекта и создал прибыльную компанию. Считалось, что у Расселла есть деловая хватка. Он продемонстрировал эту деловую хватку, сказав людям в группе: &ldquo;Давайте бросим Гринблэтта и забудем о его идеях; а мы создадим другую компанию&rdquo;. Ударил в спину, совсем как настоящий предприниматель. Эти люди решили сформировать компанию под названием &ldquo;Symbolics&rdquo;, привлекать внешний капитал, не быть щепетильными и делать все возможное, чтобы победить.

note: type: Content of: <div><p>
en: But Greenblatt didn't give up. He and the few people loyal to him decided to start Lisp Machines Inc. anyway and go ahead with their plans. And what do you know, they succeeded! They got the first customer and were paid in advance. They built machines and sold them, and built more machines and more machines. They actually succeeded even though they didn't have the help of most of the people in the group. Symbolics also got off to a successful start, so you had two competing Lisp machine companies. When Symbolics saw that LMI was not going to fall flat on its face, they started looking for ways to destroy it.
ru: Но Гринблэтт не отступил. Он и немногие лояльные по отношению к нему люди решили все равно образовать Lisp Machines Inc. и работать по своему плану. И что бы вы думали? Им это удалось! У них появился первый клиент, и им заплатили вперед. Они собирали машины, продавали их и собирали еще и еще. В конце концов они встали на ноги, несмотря на то, что большинство людей в группе им не помогало. Компания Symbolics также начала успешную деятельность, так что было две конкурирующих компании, производящих машины-Лиспы. Когда в Symbolics поняли, что LMI и не думает вылетать в трубу, они стали искать способы разрушить ее.

note: type: Content of: <div><p>
en: Thus, the abandonment of our lab was followed by &ldquo;war&rdquo; in our lab.  The abandonment happened when Symbolics hired away all the hackers, except me and the few who worked at LMI part-time. Then they invoked a rule and eliminated people who worked part-time for MIT, so they had to leave entirely, which left only me. The AI lab was now helpless.  And MIT had made a very foolish arrangement with these two companies.  It was a three-way contract where both companies licensed the use of Lisp machine system sources. These companies were required to let MIT use their changes. But it didn't say in the contract that MIT was entitled to put them into the MIT Lisp machine systems that both companies had licensed. Nobody had envisioned that the AI lab's hacker group would be wiped out, but it was.
ru: Таким образом, за уходом из нашей лаборатории последовала &ldquo;война&rdquo; в нашей лаборатории. Уход произошел, когда компания Symbolics переманила всех хакеров, кроме меня и тех немногих, кто по совместительству работал в LMI. Потом они установили правило и исключили тех, кто по совместительству работал в институте, так что им пришлось уйти полностью, и я остался один. Теперь Лаборатория искусственного интеллекта была беспомощна. А институт заключил с этими двумя компаниями одно очень глупое соглашение. Это был трехсторонний договор, в котором обе компании лицензировали исходные тексты системы машины-Лиспа. Эти компании должны были предоставлять свои изменения в пользование института. Но в договоре не говорилось, что институт вправе размещать их в системах своих машин-Лиспов, которые лицензировали обе компании. Никто не предвидел, что группу хакеров Лаборатории искусственного интеллекта разгонят, но так и случилось.

note: type: Content of: <div><p>
en: So Symbolics came up with a plan&#8239;<a href="#foot-4">[4]</a>.  They said to the lab, &ldquo;We will continue making our changes to the system available for you to use, but you can't put it into the MIT Lisp machine system. Instead, we'll give you access to Symbolics' Lisp machine system, and you can run it, but that's all you can do.&rdquo;
ru: Итак, в Symbolics созрел план&nbsp;<a href="#foot-4">[4]</a>. Они сказали лаборатории: &ldquo;Мы продолжим предоставлять в ваше пользование свои изменения в системе, но вам нельзя размещать их в системе машины-Лиспа института. Вместо этого мы предоставим вам доступ к системе машины-Лиспа Symbolics, и вы сможете работать на ней, но это все, что вы можете делать.

note: type: Content of: <div><p>
en: This, in effect, meant that they demanded that we had to choose a side, and use either the MIT version of the system or the Symbolics version.  Whichever choice we made determined which system our improvements went to. If we worked on and improved the Symbolics version, we would be supporting Symbolics alone. If we used and improved the MIT version of the system, we would be doing work available to both companies, but Symbolics saw that we would be supporting LMI because we would be helping them continue to exist. So we were not allowed to be neutral anymore.
ru: Это фактически означало, что они потребовали от нас встать на ту или другую сторону и пользоваться либо версией института, либо версией Symbolics. Что бы мы ни выбрали, это определяло бы, в какую систему пойдут наши усовершенствования. Если бы мы работали над версией Symbolics и совершенствовали ее, мы поддерживали бы только Symbolics. Если бы мы пользовались версией института и совершенствовали ее, мы предоставляли бы работу в распоряжение обеих компаний, но в Symbolics понимали, что с нашей стороны это было бы поддержкой LMI, потому что мы помогали бы им продолжать существование. Так что нам не позволили оставаться нейтральными.

note: type: Content of: <div><p>
en: Up until that point, I hadn't taken the side of either company, although it made me miserable to see what had happened to our community and the software.  But now, Symbolics had forced the issue.  So, in an effort to help keep Lisp Machines Inc. going&#8239;<a href="#foot-5">[5]</a>&mdash;I began duplicating all of the improvements Symbolics had made to the Lisp machine system.  I wrote the equivalent improvements again myself (i.e., the code was my own).
ru: Вплоть до этого момента я не принимал сторону ни одной из компаний, хотя мне было больно видеть, что произошло с нашим сообществом и программами. Но теперь компания Symbolics принуждала меня к этому. Итак, пытаясь помочь компании Lisp Machines Inc. удержаться на плаву&nbsp;<a href="#foot-5">[5]</a>, я начал дублировать все улучшения в системе машины-Лиспа, которые делали в Symbolics. Я писал эквивалентные улучшения сам (т.е. тексты программ были моими собственными).

note: type: Content of: <div><p>
en: After a while&#8239;<a href="#foot-6">[6]</a>, I came to the conclusion that it would be best if I didn't even look at their code. When they made a beta announcement that gave the release notes, I would see what the features were and then implement them. By the time they had a real release, I did too.
ru: Через некоторое время&nbsp;<a href="#foot-6">[6]</a> я пришел к заключению, что было бы лучше всего, если бы я даже не заглядывал в их тексты.  Когда они делали объявление о выпуске предварительной версии, в котором было описание выпуска, я видел, какие там были функции, а потом реализовывал их. К тому времени, как они выпускали окончательную версию, я тоже выпускал такую версию.

note: type: Content of: <div><p>
en: In this way, for two years, I prevented them from wiping out Lisp Machines Incorporated, and the two companies went on. But, I didn't want to spend years and years punishing someone, just thwarting an evil deed. I figured they had been punished pretty thoroughly because they were stuck with competition that was not leaving or going to disappear&#8239;<a href="#foot-7">[7]</a>.  Meanwhile, it was time to start building a new community to replace the one that their actions and others had wiped out.
ru: Таким образом в течение двух лет я не давал им покончить с LMI, и эти две компании продолжали работу. Но я не хотел тратить долгие годы на то, чтобы наказать кого-то, просто мешая злому делу. Я увидел, что они наказаны довольно основательно, потому что они наткнулись на конкуренцию, которая не уходила и не собиралась исчезать&nbsp;<a href="#foot-7">[7]</a>. Тем временем пришла пора начать обустройство нового сообщества взамен того, которое было уничтожено их действиями и действиями других.

note: type: Content of: <div><p>
en: The Lisp community in the 70s was not limited to the MIT AI Lab, and the hackers were not all at MIT. The war that Symbolics started was what wiped out MIT, but there were other events going on then. There were people giving up on cooperation, and together this wiped out the community and there wasn't much left.
ru: В семидесятых годах сообщество Лиспа не ограничивалось Лабораторией искусственного интеллекта Массачусетского технического института, и не все хакеры были в этом институте. Война, которую начала компания Symbolics, опустошила Массачусетский технический институт, но в то время происходили и другие события. Были люди, которые прекращали сотрудничество, и все это вместе опустошило наше сообщество, и от него почти ничего не осталось.

note: type: Content of: <div><p>
en: Once I stopped punishing Symbolics, I had to figure out what to do next. I had to make a free operating system, that was clear&mdash;the only way that people could work together and share was with a free operating system.
ru: Когда я прекратил наказывать Symbolics, мне пришлось придумывать, что делать дальше. Мне нужно было сделать свободную операционную систему, это было ясно&nbsp;&mdash; единственным способом дать людям совместно работать и обмениваться была свободная операционная система.

note: type: Content of: <div><p>
en: At first, I thought of making a Lisp-based system, but I realized that wouldn't be a good idea technically. To have something like the Lisp machine system, you needed special purpose microcode. That's what made it possible to run programs as fast as other computers would run their programs and still get the benefit of typechecking. Without that, you would be reduced to something like the Lisp compilers for other machines. The programs would be faster, but unstable. Now that's okay if you're running one program on a timesharing system&mdash;if one program crashes, that's not a disaster, that's something your program occasionally does. But that didn't make it good for writing the operating system in, so I rejected the idea of making a system like the Lisp machine.
ru: Сперва я подумывал о создании системы на базе Лиспа, но я осознал, что с технической точки зрения это не хорошо. Чтобы получить что-то подобное системе машины-Лиспа, нужен микрокод специального назначения. Именно это позволяло выполнять программы так же быстро, как другие компьютеры выполняли свои программы, и при этом еще и пользоваться проверкой типов. Без этого все свелось бы к чему-то наподобие компиляторов Лиспа для других машин. Программы были бы быстрее, но они были бы нестабильны. Так вот, это допустимо, если выполнять одну программу на системе с разделением времени&nbsp;&mdash; если одна программа дает сбой, это не катастрофа, это нечто, что ваша программа время от времени делает. Но это делало ее недостаточно хорошей, чтобы писать на ней операционную систему, так что я отказался от мысли о том, чтобы сделать систему наподобие машины-Лиспа.

note: type: Content of: <div><p>
en: I decided instead to make a Unix-like operating system that would have Lisp implementations to run as user programs. The kernel wouldn't be written in Lisp, but we'd have Lisp. So the development of that operating system, the GNU operating system, is what led me to write the GNU Emacs. In doing this, I aimed to make the absolute minimal possible Lisp implementation. The size of the programs was a tremendous concern.
ru: Вместо этого я решил сделать операционную систему типа Unix, в которой были бы реализации Лиспа, чтобы выполнять пользовательские программы. Ядро было бы написано не на Лиспе, но Лисп у нас был бы. Так что именно разработка этой операционной системы, операционной системы GNU, привела меня к написанию GNU Emacs. В процессе этого я стремился сделать абсолютно минимально возможную реализацию Лиспа. Размер программ имел чрезвычайное значение.

note: type: Content of: <div><p>
en: There were people in those days, in 1985, who had one-megabyte machines without virtual memory. They wanted to be able to use GNU Emacs. This meant I had to keep the program as small as possible.
ru: В то время, в&nbsp;1985&nbsp;году, были люди, у которых были одномегабайтные машины без виртуальной памяти. Они хотели быть в состоянии использовать GNU Emacs. Это значило, что мне нужно ограничивать программу как можно меньшим размером.

note: type: Content of: <div><p>
en: For instance, at the time the only looping construct was <code>while</code>, which was extremely simple. There was no way to break out of the <code>while</code> statement, you just had to do a catch and a throw, or test a variable that ran the loop. That shows how far I was pushing to keep things small. We didn't have <code>caar</code> and <code>cadr</code> and so on; &ldquo;squeeze out everything possible&rdquo; was the spirit of GNU Emacs, the spirit of Emacs Lisp, from the beginning.
ru: Например, в то время единственной циклической конструкцией была <code>while</code>, которая была крайне проста. Не было никаких способов досрочного выхода из оператора <code>while</code>, приходилось просто пользоваться механизмом исключений или проверять переменную в цикле. Это показывает, как далеко я зашел в ограничениях на размер. У нас не было <code>caar</code>, <code>cadr</code> и так далее; &ldquo;выжать все возможное&rdquo;&nbsp;&mdash; таким духом был пропитан GNU Emacs и его Лисп с самого начала.

note: type: Content of: <div><p>
en: Obviously, machines are bigger now, and we don't do it that way any more. We put in <code>caar</code> and <code>cadr</code> and so on, and we might put in another looping construct one of these days. We're willing to extend it some now, but we don't want to extend it to the level of common Lisp. I implemented Common Lisp once on the Lisp machine, and I'm not all that happy with it. One thing I don't like terribly much is keyword arguments&#8239;<a href="#foot-8">[8]</a>.  They don't seem quite Lispy to me; I'll do it sometimes but I minimize the times when I do that.
ru: Разумеется, машины сейчас больше, и мы уже так не делаем. Мы заложили <code>caar</code>, <code>cadr</code> и так далее, и сейчас при случае мы могли бы заложить другую циклическую конструкцию. Мы охотно расширим его в некоторых пределах, но мы не хотим расширять его до уровня Общего Лиспа. Я однажды реализовывал Общий Лисп на машине-Лиспе, и мне он не так уж понравился. Одна из вещей, которые мне ужасно не нравятся&nbsp;&mdash; аргументы-ключевые слова&nbsp;<a href="#foot-8">[8]</a>. На мой взгляд, это выглядит не совсем по-лисповски; иногда я пишу так, но я свожу к минимуму число случаев, когда я это делаю.

note: type: Content of: <div><p>
en: That was not the end of the GNU projects involved with Lisp. Later on around 1995, we were looking into starting a graphical desktop project. It was clear that for the programs on the desktop, we wanted a programming language to write a lot of it in to make it easily extensible, like the editor. The question was what it should be.
ru: На этом проекты GNU, связанные с Лиспом, не кончились. Впоследствии, примерно в&nbsp;1995&nbsp;году, мы размышляли над организацией проекта графической рабочей среды. Было ясно, что для программ среды нам нужен язык программирования, на котором была бы написана значительная ее часть, чтобы сделать ее легко расширяемой, как редактор. Встал вопрос о том, каким должен быть язык.

note: type: Content of: <div><p>
en: At the time, <abbr title="Tool Command Language">TCL</abbr> was being pushed heavily for this purpose. I had a very low opinion of TCL, basically because it wasn't Lisp. It looks a tiny bit like Lisp, but semantically it isn't, and it's not as clean.  Then someone showed me an ad where Sun was trying to hire somebody to work on TCL to make it the &ldquo;de-facto standard extension language&rdquo; of the world. And I thought, &ldquo;We've got to stop that from happening.&rdquo; So we started to make Scheme the standard extensibility language for GNU. Not Common Lisp, because it was too large. The idea was that we would have a Scheme interpreter designed to be linked into applications in the same way TCL was linked into applications. We would then recommend that as the preferred extensibility package for all GNU programs.
ru: В то время для этих целей усиленно продвигался TCL&nbsp;<a href="#tf2">(2)</a>. Я был очень невысокого мнения о TCL, в основном потому, что это был не Лисп. Он выглядел слегка похожим на Лисп, но семантически он им не был, и он был не таким ясным. Потом кто-то показал мне объявление, в котором компания Sun пыталась нанять кого-нибудь для работы над TCL, чтобы сделать его &ldquo;стандартом де-факто для языка расширений&rdquo; во всем мире. А я подумал: &ldquo;Нам нужно предотвратить это&rdquo;. Так что мы начали делать Scheme стандартным языком расширений GNU. Не Общий Лисп, потому что он был слишком велик. Идея была в том, что у нас будет интерпретатор Scheme, спроектированный для компоновки в приложения так же, как это делали с TCL. Тогда мы стали бы рекомендовать это как предпочтительный пакет расширений для всех программ GNU.

note: type: Content of: <div><p>
en: There's an interesting benefit you can get from using such a powerful language as a version of Lisp as your primary extensibility language.  You can implement other languages by translating them into your primary language. If your primary language is TCL, you can't very easily implement Lisp by translating it into TCL. But if your primary language is Lisp, it's not that hard to implement other things by translating them. Our idea was that if each extensible application supported Scheme, you could write an implementation of TCL or Python or Perl in Scheme that translates that program into Scheme. Then you could load that into any application and customize it in your favorite language and it would work with other customizations as well.
ru: Есть одна интересная выгода, которую можно извлечь из применения такого мощного языка, как вариант Лиспа, в качестве первичного языка расширений. Вы можете реализовывать другие языки переводом их на ваш первичный язык. Если ваш первичный язык&nbsp;&mdash; TCL, вы не можете легко реализовать Лисп переводом его на TCL. Но если ваш первичный язык&nbsp;&mdash; Лисп, то нетрудно реализовывать другие языки, переводя их. Наша идея состояла в том, что если бы каждое расширяемое приложение поддерживало Scheme, то вы могли бы написать реализацию TCL, Python или Perl на Scheme, которая переводит эту программу на Scheme. Тогда вы могли бы загружать ее в любое приложение и надстраивать его под свой любимый язык, и оно работало бы и с другими надстройками.

note: type: Content of: <div><p>
en: As long as the extensibility languages are weak, the users have to use only the language you provided them. Which means that people who love any given language have to compete for the choice of the developers of applications&mdash;saying &ldquo;Please, application developer, put my language into your application, not his language.&rdquo; Then the users get no choices at all&mdash;whichever application they're using comes with one language and they're stuck with [that language]. But when you have a powerful language that can implement others by translating into it, then you give the user a choice of language and we don't have to have a language war anymore. That's what we're hoping Guile, our scheme interpreter, will do. We had a person working last summer finishing up a translator from Python to Scheme. I don't know if it's entirely finished yet, but for anyone interested in this project, please get in touch. So that's the plan we have for the future.
ru: До тех пор, пока языки расширения слабы, пользователям приходится применять только тот язык, который вы им предоставляете. Что означает, что людям, влюбленным в какой бы то ни было данный язык, приходится бороться за выбор разработчиков приложений&nbsp;&mdash; говоря разработчику приложения: &ldquo;Заложите, пожалуйста, в свое приложение мой язык, а не его&rdquo;. Тогда у пользователей вообще не будет выбора&nbsp;&mdash; каким бы приложением они ни пользовались, оно приходит с одним языком, и у них нет другого выхода. Но когда у вас мощный язык, который может реализовывать другие языки, переводя с них, то вы предоставляете пользователю выбор языка, и нам больше не приходится вести войну языков. Именно это, как мы надеемся, сделает Guile, наш интерпретатор Scheme. У нас есть человек, который этим летом работает над завершением транслятора с Python на Scheme. Я не знаю, полностью ли он завершен, но если кто-то заинтересован в этом проекте, пусть свяжется. Так что вот какие у нас планы на будущее.

note: type: Content of: <div><p>
en: I haven't been speaking about free software, but let me briefly tell you a little bit about what that means. Free software does not refer to price; it doesn't mean that you get it for free. (You may have paid for a copy, or gotten a copy gratis.) It means that you have freedom as a user. The crucial thing is that you are free to run the program, free to study what it does, free to change it to suit your needs, free to redistribute the copies of others and free to publish improved, extended versions. This is what free software means. If you are using a nonfree program, you have lost crucial freedom, so don't ever do that.
ru: Я не говорил о свободном программном обеспечении, но позвольте мне кратко рассказать вам немного о том, что это означает. Выражение &ldquo;свободная программа&rdquo; подразумевает не стоимость; оно не означает, что вы получаете ее бесплатно. (Возможно, вы заплатили за копию или получили копию бесплатно.) Оно означает, что у вас как у пользователя есть свобода. Жизненно важно то, что вы вольны выполнять программу, вольны изучать, что она делает, вольны изменять ее под свои нужды, вольны перераспространять копии среди других и вольны публиковать улучшенные, расширенные версии. Вот что значит свободная программа. Если вы пользуетесь несвободной программой, вы утратили жизненно важную свободу, так что никогда этого не делайте.

note: type: Content of: <div><p>
en: The purpose of the GNU project is to make it easier for people to reject freedom-trampling, user-dominating, nonfree software by providing free software to replace it. For those who don't have the moral courage to reject the nonfree software, when that means some practical inconvenience, what we try to do is give a free alternative so that you can move to freedom with less of a mess and less of a sacrifice in practical terms. The less sacrifice the better. We want to make it easier for you to live in freedom, to cooperate.
ru: Назначение проекта GNU заключается в том, чтобы облегчить людям отказ от попирающих свободу, господствующих над пользователем, несвободных программ предоставлением свободных программ для их замены. Для тех, у кого нет моральных сил для отказа от несвободных программ, когда это означает какое-то практическое неудобство,&mdash; для них мы пытаемся дать свободную альтернативу, чтобы вы могли перейти к свободе с меньшими усилиями и меньшими жертвами в практическом смысле. Чем меньше жертвы, тем лучше. Мы хотим облегчить для вас сотрудничество и свободную жизнь.

note: type: Content of: <div><p>
en: This is a matter of the freedom to cooperate. We're used to thinking of freedom and cooperation with society as if they are opposites. But here they're on the same side. With free software you are free to cooperate with other people as well as free to help yourself. With nonfree software, somebody is dominating you and keeping people divided. You're not allowed to share with them, you're not free to cooperate or help society, anymore than you're free to help yourself.  Divided and helpless is the state of users using nonfree software.
ru: Сотрудничество&nbsp;&mdash; это вопрос свободы. Мы привыкли думать о свободе и сотрудничестве с обществом как о противоположностях. Но в данном случае они на одной стороне. При свободных программах вы вольны и сотрудничать с другими, и помогать самим себе. При несвободных программах кто-то доминирует над вами и разобщает людей. Вам не позволяют обмениваться с ними, вы не вольны сотрудничать или помогать обществу, точно так же, как вы не вольны помочь самим себе. Разобщенность и беспомощность&nbsp;&mdash; состояние пользователей, применяющих несвободные программы.

note: type: Content of: <div><p>
en: We've produced a tremendous range of free software. We've done what people said we could never do; we have two operating systems of free software. We have many applications and we obviously have a lot farther to go. So we need your help. I would like to ask you to volunteer for the GNU project; help us develop free software for more jobs. Take a look at <a href="/help/help.html">gnu.org/help</a> to find suggestions for how to help. If you want to order things, there's a link to that from the home page. If you want to read about philosophical issues, look in /philosophy. If you're looking for free software to use, look in /directory, which lists about 1900 packages now (which is a fraction of all the free software out there). Please write more and contribute to us. My book of essays, &ldquo;Free Software and Free Society,&rdquo; is on sale and can be purchased at www.gnu.org&#8239;<a href="#foot-9">[9]</a>.  Happy hacking!
ru: Мы выработали умопомрачительное количество свободных программ. Мы сделали то, что, как утверждалось, мы никогда не сможем сделать; у нас есть две операционных системы из свободных программ. У нас есть множество приложений, и нам, очевидно, еще много предстоит пройти. Так что нам нужна ваша помощь. Я хотел бы попросить вас стать добровольцами проекта GNU; помогите нам разработать свободные программы для новых задач. Загляните на <a href="/help/">gnu.org/help</a> за предложениями того, как помочь. Если вы хотите заказать что-то, на это есть ссылка с домашней страницы. Если вы хотите почитать о философских вопросах, загляните в /philosophy. Если вы ищете свободные программы для пользования, загляните в /directory, где сейчас перечислено около 1900&nbsp;пакетов (это только часть всех свободных программ, какие есть). Пожалуйста, пишите новые программы и передавайте нам. Мой сборник очерков, &ldquo;Свободные программы и свободное общество&rdquo;, находится в продаже, и его можно приобрести на www.gnu.org. Всего доброго!

note: type: Content of: <div><h3>
en: Footnotes
ru: Примечания

note: type: Content of: <div><ol><li>
en: Guy Steele designed the original symmetrical Emacs command set; then he and I began implementing Emacs (on top of TECO), but after one long joint development session, Steele began drifting away, so I finished Emacs.  Others particularly including Eugene C. Cicciarelli and Mike McMahon contributed substantially later on.
ru: Гай Стил составил первоначальный симметричный набор команд Emacs; потом мы с ним начали реализовывать Emacs (на базе TECO), но после одной длительной совместной сессии разработки Стил начал отходить, так что Emacs заканчивал я. Другие, в частности, Юджин Чиччарелли и Майк Мак-Магон, внесли свой вклад значительно позднее.

note: type: Content of: <div><ol><li>
en: Bernie Greenberg says that Dan Weinreb's implementation of Emacs for the Lisp Machine came before Greenberg's implementation for Multics.  I apologize for the mistake.
ru: Берни Гринберг утверждает, что реализация Emacs Дана Уайнреба для машины-Лиспа вышла раньше реализации Гринберга для Multics. Я приношу извинения за эту ошибку.

note: type: Content of: <div><ol><li>
en: Greenblatt's plan, as I understood it, was to hire lab people part time, so that they could continue working at the AI Lab.  Symbolics hired them full time instead, so they stopped working at MIT.
ru: План Гринблэтта, насколько я понимаю, заключался в том, чтобы нанимать людей из лаборатории по совместительству, так что они могли продолжать работать в Лаборатории искусственного интеллекта. Symbolics вместо этого нанимала их на полный рабочий день, так что они прекращали работать в институте.

note: type: Content of: <div><ol><li>
en: The background of this plan, which I did not state explicitly in the talk, is that during an initial period the ex-AI-Lab hackers, whether at Symbolics or LMI, continued contributing their changes to the MIT Lisp Machine system&mdash;even though the contract did not require this.  Symbolics' plan was to rupture this cooperation unilaterally.
ru: Этот план основывался на том (в той речи я этого не сказал явно), что в начальный период бывшие хакеры Лаборатории искусственного интеллекта, как в Symbolics, так и в LMI, продолжали вносить свои изменения в систему машины-Лиспа института&nbsp;&mdash; хотя по контракту этого не требовалось. План Symbolics заключался в том, чтобы прервать это сотрудничество в одностороннем порядке.

note: type: Content of: <div><ol><li>
en: It was not that I cared particularly about the fate of LMI, but rather I did not want to let Symbolics gain through its aggression against the AI Lab.
ru: Не то чтобы меня особенно заботила судьба LMI, но я просто не хотел позволить Symbolics нажиться на своей агрессии по отношению к Лаборатории искусственного интеллекта.

note: type: Content of: <div><ol><li>
en: This statement has been misconstrued as saying that I never, ever looked at Symbolics' code.  Actually it says I did look, at first.  The Symbolics source code was available at MIT, where I was entitled to read it, and at first that's how I found out about their changes.
ru: Из этого утверждения был неверно сделан вывод, что я никогда-никогда не заглядывал в программы Symbolics. В действительности здесь говорится, что я это делал, поначалу. Исходный текст Symbolics был доступен в институте, где я был вправе его читать, и сначала именно так я узнавал об их изменениях.

note: type: Content of: <div><ol><li><p>
en: But that meant I had to make a special effort to solve each problem differently, in order to avoid copying Symbolics code.  After a while, I concluded it was better not to even look.  That way I could write code in whatever way was best, without concern for what might be in Symbolics' code.
ru: Но это значило, что я был вынужден предпринимать особые усилия, чтобы решать каждую задачу по-другому, чтобы избежать копирования программ Symbolics. Через некоторое время я сделал вывод, что лучше даже не смотреть. Так я мог писать программы каким угодно наилучшим образом, не оглядываясь на то, что могло быть в текстах Symbolics.

note: type: Content of: <div><ol><li>
en: Symbolics at one point protested to MIT that my work, by thwarting their plan, had cost Symbolics a million dollars.
ru: Symbolics как-то раз выразила в институте протест, в котором говорилось, что моя работа, помешав их плану, стоила компании Symbolics миллион долларов.

note: type: Content of: <div><ol><li>
en: I don't mind if a very complex and heavyweight function takes keyword arguments.  What bothers me is making simple basic functions such as &ldquo;member&rdquo; use them.
ru: Я не возражаю, если очень сложная и громоздкая функция принимает аргументы-кодовые слова. Беспокоит меня случай, когда ими пользуются такие простые функции, как &ldquo;member&rdquo;.

note: type: Content of: <div><ol><li>
en: In 2021, this book can be purchased from <a href="https://shop.fsf.org/books-docs/free-software-free-society-selected-essays-richard-m-stallman-3rd-edition"> GNU Press</a>.
ru: В 2021 году эту книгу можно купить в магазине <a href="https://shop.fsf.org/books-docs/free-software-free-society-selected-essays-richard-m-stallman-3rd-edition">GNU Press</a>.

note: TRANSLATORS: Use space (SPC) as msgstr if you don't have notes. type: Content of: <div>
en: *GNUN-SLOT: TRANSLATOR'S NOTES*
ru: <h3>Примечания переводчиков</h3>
    <ol>
    <li id="tf1"><span lang="en" xml:lang="en">TECO, Text Editor and
    COrrector</span>&nbsp;&mdash; англ. текстовый редактор и корректор.</li>
    <li id="tf2"><span lang="en" xml:lang="en">TCL, Tool
    Command Language</span>&nbsp;&mdash; англ. инструментальный командный 
    язык.</li>
    </ol>

note: type: Content of: <div><div><p>
en: Please send general FSF &amp; GNU inquiries to <a href="mailto:gnu@gnu.org">&lt;gnu@gnu.org&gt;</a>.  There are also <a href="/contact/">other ways to contact</a> the FSF.  Broken links and other corrections or suggestions can be sent to <a href="mailto:webmasters@gnu.org">&lt;webmasters@gnu.org&gt;</a>.
ru: Пожалуйста, присылайте общие запросы фонду и GNU по адресу <a href="mailto:gnu@gnu.org">&lt;gnu@gnu.org&gt;</a>. Есть также <a href="/contact/">другие способы связаться</a> с фондом. Отчеты о неработающих ссылках и другие поправки или предложения можно присылать по адресу <a href="mailto:webmasters@gnu.org">&lt;webmasters@gnu.org&gt;</a>.

note: TRANSLATORS: Ignore the original text in this paragraph, replace it with the translation of these two: We work hard and do our best to provide accurate, good quality translations.  However, we are not exempt from imperfection. Please send your comments and general suggestions in this regard to <a hr
en: Please see the <a href="/server/standards/README.translations.html">Translations README</a> for information on coordinating and contributing translations of this article.
ru: Мы старались сделать этот перевод точным и качественным, но исключить возможность ошибки мы не можем. Присылайте, пожалуйста, свои замечания и предложения по переводу по адресу <a href="mailto:web-translators@gnu.org">&lt;web-translators@gnu.org&gt;</a>. </p><p>Сведения по координации и предложениям переводов наших статей см. в <a href="/server/standards/README.translations.html">&ldquo;Руководстве по переводам&rdquo;</a>.

note: type: Content of: <div><p>
en: Copyright &copy; 2003, 2007, 2013, 2021 Free Software Foundation, Inc.
ru: Copyright &copy; 2003, 2007, 2021, 2013, 2021 Free Software Foundation, Inc.

note: type: Content of: <div><p>
en: This page is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nd/4.0/">Creative Commons Attribution-NoDerivatives 4.0 International License</a>.
ru: Это произведение доступно по <a rel="license" href="http://creativecommons.org/licenses/by-nd/4.0/deed.ru">лицензии Creative Commons Attribution-NoDerivs (<em>Атрибуция&nbsp;&mdash; Без производных произведений</em>) 4.0 Всемирная</a>.

note: TRANSLATORS: Use space (SPC) as msgstr if you don't want credits. type: Content of: <div><div>
en: *GNUN-SLOT: TRANSLATOR'S CREDITS*
ru: <em>Внимание! В подготовке этого перевода участвовал только один человек. Вы можете существенно улучшить перевод, если проверите его и расскажете о найденных ошибках в <a href="http://savannah.gnu.org/projects/www-ru">русской группе переводов gnu.org</a>.</em>

note: timestamp start type: Content of: <div><p>
en: Updated:
ru: Обновлено:
