Location: EU / Hungary
Remote: Yes
Willing to relocate: Mostly no, but open if absolutely necessary
Technologies: Embedded systems, OS development, C/C++, Assembly, Python, Java, Lua, JavaScript, TypeScript, React
Résumé/CV: Available on request
Email: andy@threos.io
Hi HN,
We’re a small team of experienced developers based in the EU, looking for new contract opportunities. We're at a transition point and open to engaging with new projects, especially those that value deep technical expertise and long-term reliability.
We’ve worked across various hardware/software domains, including embedded systems, custom operating systems, and networked IoT platforms. Some highlights of our work:
next comment
Core Team:
Me – Product manager, embedded senior dev, hardware design reviewer, Threos OS architect, C/C++/asm/Python/JS and others, some Django, 3D design
Teammate 1 – Software developer/designer (C/C++ and others)
Teammate 2 – Software developer/designer (C/C++, JavaScript, TypeScript and others)
We also work with a wider circle of trusted collaborators: industrial designers, hardware engineers, generalist devs, and subcontractors as needed.
We love working on challenging technical projects—especially those involving embedded systems, custom hardware, or low-level software. We're not afraid to roll our own solutions when needed, whether that's a communication protocol, a lightweight virtual machine, or a custom scheduler. If you think we might be a good fit for your team or project, feel free to reach out at andy@threos.io. We'd love to hear from you.
2010–2024: Wireless voting system for a bank’s annual shareholder meetings.
ARM-based handheld terminals with 2.4GHz RF and LDPC error correction
Custom embedded OS, base stations, and 3D-printed enclosures
Deployed and used continuously for 14 years
2006–2014: Distributed IoT platform (prototype)
Embedded VM and bytecode execution on custom hardware
Desktop CAD-style app for dataflow programming
Fully working prototype demonstrated at trade shows
2014–2017: Hardware/software unit for tax inspection system
Project delivered; final deployment halted due to partner backing out
2015–Present: Threos OS (https://threos.io)
Object-oriented, modular real-time operating system
Single virtual address space with memory protection, multitasking
POSIX subset, package manager, dynamic linking and relocation
Dynamically linked libraries
Ported applications: GCC, Python, nano, etc.
Functional on x86_64 hardware
2017–2021+: Remote network monitoring system for a telecom company
1U embedded Linux device with modular IO, deployed and in daily use
Web-based configuration UI
Modules: LTE, environmental sensors, backup battery
2020–2025: Wireless IoT system for utility monitoring
Proprietary RF protocol over 433MHz LoRa
Battery-backed modules for impulse counting, DSMR, environmental monitoring
Gateway with LTE, Wi-Fi, and LoRa, managed via web UI
Fully functional prototype state
With a better coding you don't need more than 8 bits for a move (less for some).
The implementation should store a state machine for the game, a struct for each pieces, and also the board with index to the pieces (occupation).
There is only 16 pieces for each player, the two players move one another.
The Naive would be that you index the pieces (4 bits) and store the movement after that,
Pawns 2 bits for movement (2 forward, 2 diagonal)
King 4 bits for movement (normal move 1 + 3 bits, castle 1 + 1 bits)
Knight 3 bits for movement (8 possible move)
Rook 4 bits for movement ( 1 bit orientation horizontal/vertical 3 bit new position )
Bishop 4 bits for movement ( 1 bit orientation left/right diagonal 3 bit new position)
Queen 5 bits for movement ( 2 bit orientation horizontal/vertical/ left/right diagonal 3 bits for new position)
This way you need
Pawn 4 (index) + 2 (movement) = 6 bits
King 4 (index) + 4 (movement) = 8 bits
Knight 4 (index) + 3 (movement) = 7 bits
Rook, Bishop 4 (index) + 4 (movement) = 8 bits
Queen 4 (index) + 5 (movement) = 9 bits
But you can encode the pieces index in another way, that the Queen got 3 bit index and other pieces got longer index (Pawn 5 bits)
index bits + movement
000 + 5 movement Queen -> 8 bits
00100 + 3 movement King Normal -> 8 bits
00101 + 1 movement King castle -> 6 bits
0011x + 3 movement Knight (2) -> 8 bits
01xxx + 2 movement Pawn (8) -> 7 bits
10x + 4 movement Bishop (2) -> 7 bits
11x + 4 movement Rook (2) -> 7 bits
Also other bit allocations are possible, I don't know if it's worth it to make the Pawns index 1 bit longer, but in this way the max 8 bits required for a movement. (You need the state machine for the "decompression", also have to track that the black and white Pawns are moving in the opposite direction. )
There can be further compression, if you check the possible move for the piece.
ex. the first possible Knight movement is only 1 place, so no need to store the
movement. But this need more calculation.
My view that, this code is nice, however IMO there are several ways to make it more portable, and programer friendly, specially the ported assembly code part.
Example.
In file
threadx-master/ports/cortex_a7/gnu/src/tx_thread_schedule.S
in this code
/* Increment the run count for this thread. */
LDR r2, [r0, #4] // Pickup run counter
LDR r3, [r0, #24] // Pickup time-slice for this thread
ADD r2, r2, #1 // Increment thread run-counter
STR r2, [r0, #4] // Store the new run counter
the indexes to the data structures are really hard to modify, so you can't make modifications to the structures easy, the C structures and the assembly code indexes must be in sync, or the system will crash. And there are literally 100s of files with assembly indexes in the code.
But it can be made it easier, with another layer and macro preprocessing.
So make a header one for the assembly and one for the C code, and define the struct with the macro.
The assembly code can be compiled with C preprocessor, so the macros will work.
This way the C and the ASM stay sync. Only drawback, that the struct must be defined with this macros. But this is only for the structures that are used both in assembly and C or higher level.
Anyway if the indexes in the assembly code would be macros, that would be also much easier to modify.
I think the OP's concern was that they couldn't upload G-Code, they could only upload PDFs. And because PDFs don't encode circles, a mechanistic translation to G-Code can't convert it into a G-Code circle, only a curve that emulates a circle.
So... you know... note to self... when designing a laser cutter, allow the user to upload G-Code.
This is true for almost every machine tool I've ever used (CNC mills, 3d printers, CNC plasma cutting, & water jet), but every laser cutter I've ever used (and I've used the kind that runs on 3-phase power and has no safety enclosure) speaks some variant of PCL. The one exception being a $300 home-brew tabletop laser running the aforementioned LaserGrbl...
That said, apart from a handful of misconfigurations, I've never had a problem getting any of them to cut out nice circles.
Win 10 is slower because just like Android, it phones home. And the "compositor" is compositing. But that is what you get when you have to change the whole screen surface ( terminal screen) because the cursor ( one character) blinked.
I found this [1] from MS very useful when I designed some PCB inductor coil for a project. It was only 2D, but some 100 lines of code made the development so much easier.
"The Rust team has prepared a new release, 1.52.1, working around a bug in incremental compilation which was made into a compiler error in 1.52.0. We recommend all Rust users, including those currently using stable versions prior to 1.52.0, upgrade to 1.52.1 or disable incremental compilation. Guidance on how to do so is available below."
Is this mature enough to be bring in the kernel ????
Nowadays, it's better to use x86_64 only. The 32 bit x86 has many drawbacks. The 64 bit is much cleaner and better in many many ways.
-no segmentation, flat address space
-better interrupt handling
-better system call
-more registers
etc.
Also we found that Qemu or other Virtualization technology may cover up some of the hardware issues. Eg. Beside, that every hardware device (keyboard, usb, display, disk etc.) will have some simplified behavior, if you emulate an ARM cpu on x86_64 host, than the cache coherency will totally messed up on real hardware.
Yes, absolutely correct about possible QEMU simplifications. One option would be to use gem5 which can simulate caches/memory more accurately (sometimes), but it is also way slower as a result, some indications at: https://github.com/cirosantilli/linux-kernel-module-cheat/tr...
As someone who worked on kernel/OS code in C for many years, I'm very happy to see any language that doesn't sacrifice it's fit for embedded systems try to enter this space.
I think it was a shame that go didn't prioritize the lower-level use cases like its ancestors and I think not falling into a NIH syndrome is wise and mature of Google.
People will drop out because of change, and others will join or comeback. Life goes on.
Rust is an absolute no brainer in my eyes after writing it almost exclusively for embedded platforms for the past 8 months..
But sure, it’s not fit for all legacy systems with parts of Linux probably included in that list
We’re a small team of experienced developers based in the EU, looking for new contract opportunities. We're at a transition point and open to engaging with new projects, especially those that value deep technical expertise and long-term reliability.
We’ve worked across various hardware/software domains, including embedded systems, custom operating systems, and networked IoT platforms. Some highlights of our work:
Core Team: We also work with a wider circle of trusted collaborators: industrial designers, hardware engineers, generalist devs, and subcontractors as needed.We love working on challenging technical projects—especially those involving embedded systems, custom hardware, or low-level software. We're not afraid to roll our own solutions when needed, whether that's a communication protocol, a lightweight virtual machine, or a custom scheduler. If you think we might be a good fit for your team or project, feel free to reach out at andy@threos.io. We'd love to hear from you.