
In our blog, we already talked a little about the old versions of
ABBYY Lingvo , but all the time, beyond the framework of posts, the main thing in the history of the dictionary remained - how it was created. It was more than twenty years ago - a considerable time, but at ABBYY people have been working for a long time, and Alexander Moskalev, who designed the first version of Lingvo in 1989, is still in the company. We asked to tell him about how it all began - and this is what came of it.
After the institute, I got a job at IPTM (Institute of Problems of Technology of Microelectronics and High-Purity Materials of the USSR Academy of Sciences) in Chernogolovka. At some point, my immediate superior Viktor Korotitsky suggested that I program the B-tree access method (from the book by T. Tiori, J. Fry. “Designing Database Structures”) in C. We did not really understand why we needed it, but the idea was beautiful and we wanted to see how it works. Of all the varieties I chose the most turbulent and difficult to implement. It seems to be called B * -tree. Pretty soon we managed to get something alive. I just wanted to stick it somewhere.
At this time, I was learning the brainchild of Belarusian programmers with the saying name "ASP". (There were some advantages in the work on the ASPA, for example, the opportunity to be commanded to Minsk or to go to a seminar in Sevastopol in August.) It was supposed to use the ASPA to automate the institute library. The program was raw, but much worse - it periodically corrupted the database, which I stuffed manually. After the third time, I broke down and began to write my own simple DBMS under the library catalog. Here B-trees came in handy. They were comfortable because they worked quickly due to the always balanced tree. In addition, they allowed to view a sorted list without referring to nodes, since the leaves were linked into a linear list.
')
And then David Yang appeared. The story entered the annals, but I repeat. David then had a long hair, wore a white shirt with short sleeves and white short shorts. At the same time, he somehow constantly smiled. I was not abroad even then, but I knew that our people do not smile like that. In addition, for ten years after that I did not see anyone in shorts at the institute or at least some institution, so the beginning was revolutionary. David suggested making a dictionary program. In one rectangle (vertical) there should be a list of words, in the other (horizontal) there should have been a card. The Romanov English-Russian dictionary (a pocket-sized yellow book) was chosen as the test subject.
I agreed. It was very similar to my library bud. But it was supposed to be a resident program in memory. And with this we had to suffer - about 50% of the effort was spent creating an actually living resident. The problem was also that there was practically no PC documentation. Information got in some absolutely fantastic ways.
Title
David suggested the program be called Lingvo. Only ten years later I learned that this word means “language” in Esperanto. I tried to imagine her as LING (uist) VO (lume), and with this name she appeared in the screensaver for a while. Later, when linguists came to us, they rejected my “decoding”. As it became something looming, it became clear that we must somehow draw up our activities. David proposed to create a company and call it "BIT".
Mars and Venus
At some point, David began to bring the text of the dictionary, typed by some cooperative. I was not very attentive to the source code of the dictionary then, but in vain. Not only was the font small, the text itself was also overloaded with various icons, selections and symbols, right down to the steam trains when designating railway subjects. I had to fill and edit part of the text of the dictionary manually. At the same time, I, like Romanov, also decided to pervert to the maximum and used the text-encoding representation on the PC wherever possible, for example, instead of f. and m. (ie, masculine and feminine) I put the symbols of Mars and Venus (signs and ♀).
To create dictionary files from the source text, I had to write a compiler - LC. Immediately the idea came to put it in the distribution kit and attach an example of the source code of a small demonstration dictionary (example.dsl), so that people would rivet their dictionaries and rejoice with us.
Colors
I chose the color scheme of the windows myself. I generally like the combination of cyan and brown, not to mention green. David did not like it, he suggested something like this:

Or even brighter, in my opinion, there was still a bright yellow. (In the early 90s, only a mass of Chinese poisonously painted things appeared, and such acid combinations were in vogue). But I stood my ground. To meet all, a utility has been written on the configuration of colors and other parameters of Lingvo.

It was possible to choose the color of almost any interface element.
Special effects
By the way, when the program was started, there appeared something like this mini-screen saver:

David put forward the idea that at the moment the splash screen appeared, the upper point of the letter i would come off the word BIT and “float”, swaying, up the screen. About a day I killed it, but, not being satisfied with the naturalness of the floating effect, I spat on it.
Approximately similar ideas I myself generated. The installation program of the first versions looked funny. A pseudo-graphic was used to draw a five-inch floppy disk (in an envelope), and the process of copying files was displayed flying with squeals on the screen of smiling color faces.
Coding
For compilation, some of Borland C was used. Microsoft had a compiler then, but it did not seem convenient to me. For a long time, all the Lingvo.com code fit in the smallest tiny-memory model (this is when the code and data are addressed within 64 KB). Then, when the requests and functionality grew, they moved to a small-model. When we learned to swap the area of ​​memory occupied by the hard disk, the size of the program was no longer so relevant, but by inertia I continued to watch carefully that nothing extra was in the code. I even rewrote the standard C-shny boot module that Borland supplied to reduce the size of the resident to the minimum possible 3.5 KB. In this case, by the way, keyboard switches and localizers usually took more than 10kb. There was one problem with this swapped memory: the intercepts we intercepted were accessing the swapped memory and causing a blue screen.
By the way, programming and debugging was very convenient. The main thing is very fast. Several passes with your hands (you can even without looking at the screen and keyboard) - and the result is obvious. The reaction time has always been strictly predictable, unlike this slightly dreary Windows system, where no, even the fastest multi-core processor, will insure you from an unpredictable hang-up for a couple of seconds at the most unexpected moment.
Protection
Under the protection decided to include the text of the dictionary and installation. If you look at the user dictionary of the first versions, then the text of the articles is completely open there. For system dictionaries, I applied the most elementary protection: I changed the halves of a byte in some places, put a mask. At some point, the dictionaries began to compress and the question completely disappeared.
The archiver was written by Vadim Tereshchenko (now the financial director of ABBYY). I remember that the archiver code impressed me greatly. For quite a long time (10 years) we managed this archiver inside the products and used it as a separate utility.
At some point, David offered to protect the installation with the help of some third-party Shield system. Immediately faced with a lot of problems among users, so that this symbiosis lived for long. The protection that I did was the most primitive, but in some cases it seemed to work. In the boot (very first) diskette block in the first bytes the name of the operating system is written, usually MSDOS5.0 (if I'm not mistaken). I changed it to MSDOS5.2 while recording the distribution (non-existent version number). And so, with some copying methods, new floppies remained with the prescribed formatting of MSDOS5.0 and, accordingly, caused an error during installation.
There was an idea to laser floppy diskettes. There is such a way to protect using bad-blocks. I even tried to use for this a pair of lasers in IPTM. One, unfortunately, did not cause any noticeable damage to the floppy disk, the other, on the contrary, burned so that the bad-blocks "floated" (now in one place, then in another - in a certain area). Honestly, it was just interesting for me to work with a laser, it had no special commercial sense.
In general, it seems to me that there was no need to defend more strongly then. With strong protection, we would not have received such mass distribution.
Based on the blog of the team ABBYY Lingvo