
In my spare time, I have been creating an open-source framework for writing desktop applications, mostly business-oriented (ERP, WMS, CRM, etc.). Inspired by the reading of the article on the
verification of business ideas , I would like to state some of my thoughts about this whole undertaking and hear your feedback.
What I would like to hear from you:
- What do you think of the reality of this idea?
- Perhaps you have any other ideas that are not a pity to give to open-source?
- Any other reviews and comments
Open-source projects also require money.
By itself, the idea of ​​open-source looks very attractive when you act as a
user of the product :
- Many open-source products are completely free or have a free basic version.
- If the project is under active development, then the chances of quickly getting free support in case of problems are also very large.
- If the open-source project is quite mature, then with a high probability you will be able to find answers to most of the emerging issues, since the discussion of such problems is also open to various resources like Google Groups or StackOverflow .
If you now look at open-source
from the point of view of the project team members , it turns out that all the above advantages require constant work of the project participants:
- It takes a lot of time to write, debug, and test new code, release releases, and so on.
- Even more time is spent on customer support for the product. Users want to get the right answers to their questions quickly, but at the same time they often do not bother to search if anyone has already asked a similar question. This generates a lot of similar questions and spends a lot of time even on answers like "it was already there, look at this link."
What did I want to convey by writing these pretty obvious things? A very simple idea is
that in order for an open-source product to be high-quality and actively develop, it still needs to be well funded , which is why most
large open-source libraries, frameworks and programs are developed in one of the following ways:
- They are developed for the internal needs of commercial companies (having other sources of income) and then the full-featured free version is laid out in open access.
- A free basic version of the product and an extended set of functionality sold for money are being developed. Sometimes we are talking only about paid technical support for a free, but difficult to master product. In some cases, for the money in the priority mode, features can be added upon request of the customer.
- In America, a variant of a startup is also possible, which quickly receives money for development, having a minimal prototype or sometimes only an idea of ​​a product, but in our country it doesn’t really work.
All other "ways" of the existence of an open-source project like
donations (donate) of users do not work very well, which, for example, is well demonstrated by the story of
OpenSSL , when donated money was not even enough for the salary of two developers, which ultimately resulted in the critical vulnerability of
heartbleed .
Where did the idea come from

')
A couple of years ago I made an attempt to open my own business in an industry unrelated to IT, but for various reasons it did not go. Everyone knows that even the smallest company in our country is legally required to keep accounting records and my company was no exception. For the purposes of self-education, I decided to conduct accounting myself. I learned in advance from a friend of an accountant which accounting programs of a program can be suitable for a newly opened company in terms of price - functionality.
According to the accountant, the simplest version of
1C was a good candidate. It cost something around 3,000 rubles. Of course, I eventually bought it, but before that I also looked at alternative options. From box products, nothing sensible for the same money was then found (although now it seems to me that I was not looking well enough), but I also looked at cloud solutions for small enterprises (like
My Business or
Kontur. Accounting ), which were gaining popularity then . The cloud did not suit me for at least
two reasons :
- It was impossible at some point to abandon the cloud and transfer to another popular boxed product, since There was no function to export data from services. It seems that there is still no such function.
- I know how the clouds and the Internet as a whole are arranged, how many vulnerabilities are every week and how long they are fixed on the servers. Therefore, I do not really believe in the security of such important data as the company's accounting when they are available online.
Thus, I became the owner of the license for 1C. Simplified. I will not describe in detail my not very pleasant experience with 1C, especially since many of the shortcomings of this program have recently been described in the
article . First of all, I am confused by
several things :
- Lack of modularity in the system. The type of activity of my organization required the presence of only a few basic modules - Basic work with postings , Bank and Cashier , Employee Accounting and Reports . At the same time, I "in the appendage" still get a bunch of extra modules like Production , Warehouse and Intangible Assets . These modules divert attention from the tasks I really need, since the interface is very overloaded. I do not mind if the database will contain a little more tables than is required, but I do not agree if the same happens with the interface.
- Work speed By and large, the 1C. Simplified is so inexpensive, because from a technological point of view it is a greeting from the 90s. The main engine is written in C ++, which in itself is not bad, but can lead to unexpected application crashes due to memory initialization errors, which I repeatedly observed with my copy. In addition, the so-called storage facility is used “Embedded database” is a proprietary and rather poorly documented binary data storage format written by 1C developers. In this format, all data is stored in one file, which does not add speed to the database.
- Opacity updates. This has already been described in detail in the above article, but I have a few complaints about updates. First, frequent changes to the interface - for the year that I used 1C after the updates, the layout of the interface elements changed dramatically at least 2 times. Secondly, a very long time to apply updates - from half an hour to 2 hours on a very small database (no more than a hundred payments and a couple of employees). This is probably due to the specifics of the file database, but nevertheless it is not clear to me that it can change so much every 2 weeks. I was not surprised if the code of 1C itself changed, but that is why the database migrations take so long for me to understand. Thirdly, the presence of a large number of bugs in the system - almost every second update in the list of changes contains only the line “fixed errors of previous versions”. In general, the impression was that the 1C developers were beta testing the owners of the basic versions of the program. As far as I understand, automatic testing on the 1C platform was not available until the latest versions.
- Non-standard technologies. Since 1C has its history from the 90s, it drags its own non-standard set of technologies - its own programming language, its own development environment, its own debugger, and so on. To change something in the 1C code, you need to learn a new language from scratch with your pitfalls, which reduces the number of competent specialists who can potentially participate in the development of the platform, although 1C is struggling with this by arranging various training seminars and competitions. In any case, the speed and optimization of the language, in my opinion, can not be compared with other mainstream languages ​​like Java or C #.
- It works only under Windows. I think that I will not be mistaken if I say that it is not only me who is sad about this. My main operating system is Mac OS X, but I also often work with Linux, but I don’t want to pay for a Windows license. The current solution is to run a Windows virtual machine under Virtualbox, inside of which there is 1C. I also heard about solutions based on Wine @ Etersoft , but again you have to pay for it, so the total cost of even the basic version of 1C can increase to 6-8 thousand rubles, if you add a Windows license.
Time to act

This and much more made me sad on dark evenings in front of a 1C screen. In the end, I decided to try to write a platform that would not have the drawbacks of 1C, and, perhaps, in the future, write on it some alternative to 1C. This is what my
technology stack looks like:
- Java There is no need to explain anything for a long time. The choice of Java as the main programming language and JVM as runtime solves the problems with the portability of programs on different platforms. In addition, under Java there are several first-class development environments (hello, Jetbrains!) And there is no problem with developer training. Since the product is being developed from scratch, you can immediately write to Java 8 and attach the correct JRE to the distribution.
- JavaFX . This is a fairly new technology for building UI applications developed by Oracle. It is positioned as a replacement for outdated Swing, allows you to separate the presentation of interfaces (XML files) from the work logic (Java classes), and supports styling with CSS. There are already JavaFX application development tools like SceneBuilder and ScenicView . In addition, JavaFX applications can also be run as web applications (although not sure how convenient and fast it is).
- PostgreSQL. In my opinion, relational databases are better suited for accounting and business, because they provide data integrity out of the box, and the data itself usually fits well with the table structure. PostgreSQL in this role is one of the leaders among free relational databases, so there are serious conversations about it, even as a replacement for databases from Oracle in government.
- Spring Framework. It would be surprising if I did not choose Spring as the main framework for writing the application. Besides the fact that Spring is an excellent IoC container for an application, it represents a whole ecosystem of libraries for working with various databases, and also gives out of the box such things as declarative database transaction management and a declarative description of roles.
- Spring Data + Hibernate JPA. The logic of working with the database seems to be most conveniently done using Spring Data , since in many cases, it is not necessary to write database requests (they are generated by the method name). Hibernate is used only as a reliable implementation of JPA in conjunction with Spring Data.
- Apache Camel. To ensure the scalability of the solution, it makes sense to immediately lay down on the application of enterprise integration patterns and logic based on message transfer. If we are talking about a copy of the application located on the same machine with the database, then everything will be reduced to the formation of message queues in the application's memory. However, if you immediately lay down on such an approach on a small scale, then with an increase in the number of users of the application, you can easily switch to using remote queue servers (like Apache ActiveMQ or ZeroMQ ).
- Stecker. I wrote this thing to support modularity in the system myself, looking at how it was done in the popular Jenkins CI system and after reading a little about OSGI .
- JUnit and a set of matchers for JavaFX. For writing tests, the best choice is JUnit and a set of additional tools for writing tests for JavaFX. An example of such a tool is TestFX .
In general, as you understand, it also takes time to conduct experiments and select technologies, especially if all this is done in the evenings and on weekends, so immediately before writing the application code I arrived two months ago. What was done
at the moment :
- Written basic JavaFX application (even has a small splash screen when loading)
- Created database schema suitable for basic accounting
- Produced import of classifiers like OKVED, KBK, OKSM, OKFS, ZAKU, OKTMO, etc. to the database. At the same time he wrote a client for the FIAS address database.
- The application can automatically embed the UI defined in the plugins in the main application. UI development mode is supported, in which changing the FXML file with the UI description leads to updating the UI of the application to hot (without restarting the application).
- Loading from the plugins of classes required for working with the database (JPA entities, Spring Data repositories) is supported.
Seven times measure cut once

As you have probably understood, I set myself a rather large (perhaps even too large) task - to write something that could completely replace 1C for small enterprises, but at the same time:
- Would not have the disadvantages of 1C listed above.
- Would have open source
- Would have a clear monetization model
- Allowed to earn on this third-party developers
How do I see myself
solving these problems :
- The disadvantages of 1C are leveled using the correct technology stack, which I mentioned above, as well as the correct approach to development, based on the widespread use of CI and covering critical parts of the system with automatic tests
- The system kernel and key libraries are published under a free, but NOT copyleft license (for example, Apache License 2.0) on GitHub.
- The application is distributed as follows: a set of basic accounting modules like a bank or working with staff is free for everyone, but specialized modules like reporting or production also have open source code, but are sold by subscription for reasonable money. Subscription is once a year for updates, i.e. if you unsubscribe, the program will not stop working, but over time it may lag behind the changes in legislation, the forms of documents may change, etc. Each user has the right to choose a subscription to an arbitrary set of modules in accordance with his needs. Thus, you do not have to pay for the extra functionality immediately and buy it when you need it.
- Since the entire technology stack is open, nothing prevents other developers from writing their own modules and selling them by subscription. At the same time, the service of checking the code of third-party modules by the developers of the system’s core becomes available, which is done for a reasonable fee.
It is clear that you need to start with a minimally working prototype. I believe that the minimum prototype should contain the following
accounting modules :
- Desktop (system start screen)
- Posting module (chart of accounts, manual postings)
- The module of work with the bank (exchange with the bank in 1C format, the creation of payment orders and requirements, bank statements)
- Reporting module (the most basic reports such as ADV, DAM, forms 4-FSS and 4a-FSS, personal income tax report, report to Rosstat)
- Salary and personnel (payroll, the formation of payments for contributions to the FSS and the FIU, deductions)
- Data on the organization (storage of various codes: OGRN, TIN, PPC, as well as data on managers and accounting policies)
- Import data (most likely in XML format from 1C)
Recently, I came to the implementation of accounting functionality in the application and then looked at that very
lecture of Arkady Moreynis . This lecture is very sensible and corresponds to what I read and heard before, so I decided to double-check what other accounting programs could be used by small companies. It turned out that in fact there are many accounting programs from various developers. Of course, giants like SAP or Oracle do not fall here because of their high cost.
Serious desktop programs include the following:
- 1C
- Buhsoft
- Sail
- BEST
- Info Accountant
All of them work only under Windows, but at the same time 1C has a client for Linux. In addition to these supported and less updated solutions, there is a huge mass of small unsupported programs from different manufacturers. I really do not want to become another such program, so I’m not quite sure if I can, having solved the 1C problems described above, create at least some competition for the listed companies, because, obviously, this is a very competitive market. In addition, if you follow the logic of Arkady Moreynis, then you should not climb into such an overpopulated market, but you should look for your niche, which is correct. In this regard, I have
great doubts whether I should continue to do bookkeeping or should I switch to something else?If you do not go beyond the scope of applied business solutions, then I see a
couple of possible ideas :
- Warehouse Management System (WMS) . Such systems are much smaller and a lot of samopisny solutions. They are easier to implement, and, in my opinion, less subject to rewriting due to changes in legislation.
- Supply Chain Management System (SCM) . This topic has been popular in Europe for 10-15 years and new solutions are constantly emerging that optimize logistics and the delivery of goods.
- Various specialized programs for patent departments or for HR managers.
I really do not want my work to be wasted. Who cares to see the current version of the code without documentation and comments, you can click
here . Thanks to everyone who read to the end!