Actualizare, 4 octombrie 2026: proiectul descris mai jos se numeste Sipral si a ajuns la versiunea 1.0. Detaliile lansarii, cifrele masurate si licentierea sunt in articolul Sipral 1.0: SIP stack in Rust construit de Sytek si pe sipral.org.
TL;DR: Pornim dezvoltarea unui SIP stack client propriu, scris de la zero in Rust. Motivele sunt trei: bibliotecile SIP consacrate vin sub GPL sau cu licenta comerciala separata, sunt scrise in C si expuse la erori de memorie, iar agentii vocali AI au nevoie de o linie telefonica directa, fara server media intre centrala si agent. Tinta este o biblioteca cu un singur C ABI, folosibila din Swift, Kotlin, .NET, Python si Dart, testata pe centralele telefonice care ruleaza azi in firme.
Cuprins
- Problema: telefonia intr-o aplicatie e mai grea decat pare
- Trei limite ale bibliotecilor existente
- Ce vrem sa construim
- Principiile de lucru
- Ce nu va face
- De ce o face Sytek
- Intrebari frecvente
- Glosar
Problema: telefonia intr-o aplicatie e mai grea decat pare
Un apel VoIP pare simplu din exterior: suni, raspunde cineva, vorbiti. Dedesubt se intampla multe. Aplicatia se inregistreaza la centrala prin protocolul SIP. Negociaza codecurile cu partea cealalta. Cripteaza vocea. Gaseste un drum prin NAT si firewall. Supravietuieste cand telefonul trece de pe Wi-Fi pe date mobile.
Toate astea stau intr-o singura componenta, numita SIP stack client. Orice softphone, aplicatie mobila de apel sau agent vocal se bazeaza pe unul. Cine construieste un astfel de produs nu scrie de obicei SIP stack-ul de la zero. Il alege dintre putinele biblioteci mature care exista.
Trei limite ale bibliotecilor existente
1. Licenta
Cele mai folosite biblioteci SIP client pentru aplicatii mobile si desktop, PJSIP si Linphone, sunt distribuite sub GPL, cu o licenta comerciala separata oferita de producator. GPL cere publicarea codului intregii aplicatii care o include. Pentru un produs closed source sau pentru distributia prin App Store si Google Play, asta inseamna fie publicarea codului, fie negocierea unei licente comerciale.
2. Siguranta memoriei
Aceste biblioteci sunt scrise in C. Un SIP stack parseaza tot timpul mesaje venite din retea, din surse pe care nu le controleaza. In C, o greseala de lungime sau de indexare in parser devine o vulnerabilitate de memorie. Este o clasa de erori pe care o vedem raportata an de an in software-ul de comunicatii.
3. Agentii vocali stau departe de linie
Agentii vocali AI care raspund la telefon devin o cerinta reala in firme. In arhitectura obisnuita, intre centrala telefonica si agent sta un server media sau un serviciu intermediar care transforma apelul in stream audio. Fiecare pas in plus inseamna latenta, cost si inca un point of failure.
Ce vrem sa construim
Un SIP stack client complet, scris in Rust, cu urmatoarele tinte:
- Semnalizare SIP conforma RFC 3261, testata pe centralele reale din firme: Asterisk, FreePBX, FreeSWITCH, plus proxy-uri precum Kamailio si OpenSIPS.
- Media si criptare: codecuri uzuale (Opus, G.722, G.711, G.729), SRTP si DTLS-SRTP, TLS pentru semnalizare.
- NAT traversal: STUN, TURN si ICE, ca apelurile sa mearga si din spatele routerelor de acasa sau al retelelor mobile.
- Un singur C ABI, din care se genereaza bindings-urile pentru Swift, Kotlin, .NET, Python si Dart. O singura biblioteca pentru iOS, Android, macOS, Windows si Linux.
- Doua moduri de lucru: cu microfon si difuzor, pentru softphone-uri, sau fara dispozitiv audio, cu vocea predata aplicatiei ca frame-uri PCM, pentru agentii vocali.
Principiile de lucru
- Clean-room, din standarde. Scriem codul pornind de la RFC-uri si recomandarile ITU, nu din codul altor biblioteci. Asa putem oferi licenta comerciala fara restrictii mostenite.
- Core fara I/O. Logica de protocol nu deschide socket-uri, nu porneste thread-uri si nu citeste ceasul singura. Devine testabila determinist, iar o sesiune inregistrata la client se poate rula din nou exact la fel.
- Testare adversariala. Parserele vor trece prin fuzzing, adica milioane de mesaje generate aleator sau malformate, si prin suita de teste RFC 4475, scrisa special pentru mesaje SIP dificile.
- Masurat, nu declarat. Orice cifra pe care o vom publica va avea metodologia alaturi.
- Licenta dubla. AGPL-3.0 sau licenta comerciala. Sytek detine integral drepturile asupra codului.
Ce nu va face
- Nu va fi centrala telefonica, proxy sau B2BUA. Este un endpoint, adica partea care suna si raspunde.
- Prima versiune se concentreaza pe audio. Video vine mai tarziu.
- Nu va include cod GPL sau LGPL, nici direct, nici prin dependinte.
De ce o face Sytek
Telefonia VoIP face deja parte din ce livram: integrari cu centrale bazate pe Asterisk, telefonie SIP legata de aplicatiile business, click-to-call in CRM. Un SIP stack propriu inseamna ca atunci cand un client are nevoie de telefonie integrata intr-o aplicatie sau de un agent vocal pe linia firmei, controlam fiecare layer, de la pachetul de retea la interfata din aplicatie.
Vom publica proiectul cand versiunea 1.0 este completa si masurata. Pana atunci, daca ai un proiect de aplicatie business care are nevoie de telefonie integrata, discutam.
Intrebari frecvente
Ce este un SIP stack client? Este biblioteca de cod care face apelurile VoIP dintr-o aplicatie: inregistrare la centrala, apeluri, codecuri, criptare, NAT traversal. Softphone-urile, aplicatiile mobile de apel si agentii vocali folosesc un astfel de SIP stack.
De ce nu folositi PJSIP sau Linphone, care exista deja? Sunt mature, dar vin sub GPL sau cu licenta comerciala separata, iar pentru aplicatii closed source si pentru App Store si Google Play GPL nu se potriveste. Sunt scrise in C, unde erorile de memorie la parsarea datelor din retea sunt un risc permanent.
De ce Rust si nu C sau C++? Rust elimina la compilare erorile de memorie care in C apar in productie. Spre exterior expunem un C ABI, ca biblioteca sa poata fi folosita din orice limbaj.
Ce legatura are un SIP stack cu agentii vocali AI? Agentul are nevoie de o linie reala pe centrala. Vrem ca el sa se inregistreze direct ca interior si sa primeasca vocea ca frame-uri audio, fara server media intre centrala si agent.
Va fi open source? Da, sub AGPL-3.0, plus o licenta comerciala pentru produse closed source si pentru App Store si Google Play.
Ce nu va face SIP stack-ul? Nu va fi centrala, proxy sau B2BUA. Prima versiune acopera audio; video vine ulterior.
Glosar
- SIP (Session Initiation Protocol) - protocolul standard prin care telefoanele VoIP si centralele stabilesc, modifica si inchid apelurile.
- SIP stack client - biblioteca de cod care implementeaza partea de telefon a protocolului SIP intr-o aplicatie.
- PBX (centrala telefonica) - sistemul care gestioneaza interioarele si liniile unei firme, de exemplu Asterisk sau FreePBX.
- SRTP - varianta criptata a protocolului care transporta vocea in apelurile VoIP.
- NAT - mecanismul prin care routerele ascund mai multe dispozitive in spatele unei singure adrese publice; complica apelurile VoIP.
- C ABI - interfata binara standard prin care o biblioteca poate fi apelata din aproape orice limbaj de programare.
- Clean-room - metoda de dezvoltare in care codul se scrie doar din specificatii publice, fara a copia sau consulta codul altor implementari.
- AGPL-3.0 - licenta open source care cere publicarea codului si pentru software-ul folosit prin retea, nu doar pentru cel distribuit.