The project started with a team of three engineers and grew to six specialists. In a short timeframe, we had to process a large amount of new information, define roles and a delivery plan, establish day-to-day collaboration with the customer’s engineering team, and provide Kaspersky with ready-to-use instructions and engineering notes. We completed these tasks successfully.
Below, we describe the project from an engineering perspective and summarise the business outcome at the end.
What we deliveredDuring the project, our engineering team developed and ported 10 software components to KasperskyOS:
- RRDtool database
- AMQP/RabbitMQ client library
- GPIO wrapper (libgpiod), I2C wrapper, SPI wrapper libraries
- I2C/SPI/GPIO test platform to support continuous integration for the libraries
- JWT library
- Telegram bot management library
- Bluetooth protocol stack to support sensors
- A pilot “primer” project for porting the MONO framework (.NET) to KasperskyOS
How we ported each applicationEach porting task followed these steps:
- The customer selected the target application.
- We analysed external dependencies to assess portability, as KasperskyOS does not support all POSIX (Portable Operating System Interface) calls.
- We defined functional requirements.
- We analysed the implementation approach, prepared documentation, and agreed on the design with the customer.
- Implementation.
- Review and demo of the working application.
To deliver the work, we used GCC cross-compilers (GNU C, C++, make, CMake) and the KasperskyOS SDK.
RRDtool port: challenges and how we solved themRRDtool turned out to be the most complex part of the project — and we resolved the issues.
RRDtool (Round-robin Database tool) is a set of libraries and utilities for round-robin time-series databases. It helps store, process, and visualise dynamic data sequences such as network traffic, temperature, CPU load, and more.
For a successful port, the client library must support sending requests to the server over TCP, and the caching server must accept and process requests for:
- creating a new database
- changing database schema and settings
- updating/retrieving data
- writing cached data to the database file
- retrieving the list of databases stored on the server
What was missing in the SDK, and what we changedWhile porting RRDtool, we faced several limitations and addressed them:
- The KasperskyOS SDK lacked libintl and glib-2.0, so we added the required header and binary files.
- We reduced the functionality of the ported version because some libraries and packages were not available in the SDK. We excluded:
- Ceph distributed file system support (dependency on librados)
- CGI interpreter, graphing, and reporting (dependencies on libpango and libcairo)
- Perl, Lua, Python, and Ruby APIs
Examples for the communityBased on the ported RRDtool for KasperskyOS, we delivered community examples covering:
- GAUGE and COUNTER data types
- consolidation functions (CF): AVERAGE, MIN, MAX
- parallel update and fetch operations by writing and reading clients