Privacy en cookies
Deze verklaring gaat over twee afzonderlijke dingen: de FoxSDR-applicatie die je installeert, en deze website. Ze verzamelen verschillende gegevens, om verschillende redenen, en worden hieronder apart beschreven — de applicatie eerst, omdat dat het deel is dat op je eigen computer draait. Ze is geschreven om volledig te zijn in plaats van kort: elk veld dat een van beide opslaat, staat erin, ook de velden die de meeste verklaringen weglaten.
De applicatie: wat ze verstuurt
Er is geen account, geen licentiesleutel en geen activering, en FoxSDR meldt nooit iets over waar je naar luistert. Het doet uit zichzelf precies vier soorten netwerkverzoeken: een updatecontrole; een anoniem gebruiksrapport, met een kleine “draait nog”-hartslag zolang de applicatie open is; een crash- of vastloperrapport na een fout; en — alleen als jij de plug-inwinkel opent of daarin op NU CONTROLEREN drukt — een verzoek aan de plug-incatalogus. Elk ervan wordt hieronder veld voor veld beschreven, en elk kan worden uitgeschakeld. Drie schakelaars regelen ze: SYSTEEM → Updates, SYSTEEM → Gebruiksrapportage en SYSTEEM → Diagnose. Geen enkele functie is ervan afhankelijk dat een van deze aan staat, en niets zeurt als je er een uitzet.
Wat er op je computer blijft
Je opnames, zowel audio als ruwe I/Q, de beelden die SSTV- en weersatellietdecoders opbouwen, alles wat de decoders decoderen, je bladwijzers, bandplannen, instellingen, je ontvangerpositie en je geïnstalleerde plug-ins zijn bestanden op je eigen schijf. Niets uploadt ze, en geen enkele frequentie waarop je afstemt, verlaat je computer.
De updatecontrole
Eén keer per start vraagt de applicatie aan deze site of er een nieuwere versie bestaat. Het hele verzoek is GET /api/update?v=, gevolgd door de versie die je gebruikt — geen identificatie, geen installatie-id, geen cookie, en niets wat aan een later verzoek kan worden gekoppeld. Deze server schrijft er geen analyserecord voor: alleen paginaweergaven en bestandsdownloads worden vastgelegd, en het update-eindpunt is geen van beide. Zet het uit onder SYSTEEM → Updates, en de applicatie neemt nooit meer contact op met de dienst.
Er wordt niets gedownload of geïnstalleerd tenzij je op de knop drukt. Als je dat doet, wordt het installatieprogramma via HTTPS van deze website opgehaald en wordt de SHA-256 ervan gecontroleerd tegen de digest die de server heeft gepubliceerd, voordat het bestand een naam krijgt die iets zou kunnen uitvoeren — en dat ophalen is een gewone download van deze site, dus wordt het vastgelegd zoals elke andere, met het IP-adres, de geschatte locatie, de browser en het besturingssysteem zoals beschreven in het websitedeel van deze verklaring.
Gebruiksrapportage
Vanaf versie 0.53.0 is er een anoniem gebruiksrapport, onder SYSTEEM → Gebruiksrapportage. Het staat standaard aan, en je kunt het uitzetten — vink dat vakje uit en de rapportage stopt onmiddellijk. Er wordt één rapport per start verstuurd, dat de zojuist afgelopen sessie beschrijft, en dit is alles wat erin staat:
| Verstuurd | Voorbeeld | Waarom |
|---|---|---|
| Installatie-identificatie | 32 willekeurige hexadecimale tekens | Onderscheidt 100 gebruikers van één gebruiker die 100 keer start. Willekeurig gegenereerd op je computer bij de eerste start, verwijderd als je de rapportage uitzet, en nooit afgeleid van je hardware, netwerk of naam. |
| Applicatieversie | 0.99.39 | Of mensen bijwerken. De Android-alfa meldt zijn eigen build als 0.98.1-android.4 — een achtervoegsel -android.N op het releasenummer waarvan hij is gebouwd, zodat zijn rapporten nooit worden verward met die van het Windows-installatieprogramma. |
| Besturingssysteem | Windows 10.0.22631, Linux 6.8.0 of Android 14 | Welke platforms er echt worden gebruikt. Het besturingssysteem en het build-, kernel- of releasenummer ervan, nooit de naam van je computer of je gebruikersaccount. De Linux-build (0.99.39) en de Android-alfa (0.98.1-android.4) sturen dezelfde velden onder dezelfde schakelaar. |
| Architectuur | x64 of arm64 | Zie hierboven. |
| Aantal starts | 12 | Of de software meer dan één keer wordt gebruikt. |
| Aantal crashes | 1 | Hoe vaak het misgaat. |
| Sessieduur | 3600 seconden | Of sessies minuten of uren duren. |
| SDR-model | uhd b200 | Welke radio's voorrang krijgen. Serienummers worden verwijderd vóór het versturen. |
| Gebruikte demodulators, en hoe lang | WFM: 3000s | Welke modes verder werk rechtvaardigen. |
| Geopende panelen | map, decoded | Welke functies worden gebruikt. |
| Geïnstalleerde plug-ins | ADS-B 1.0.0 | Welke decoders verder werk rechtvaardigen. |
Dat is de volledige lijst. Hij wordt met de applicatie meegeleverd als PRIVACY.md, en een geautomatiseerde test controleert de payload veld voor veld, zodat er geen nieuw veld kan worden toegevoegd zonder dat die test faalt en beide documenten worden bijgewerkt. Het uitzetten van de rapportage verwijdert de installatie-identificatie, dus als je het ooit weer aanzet, krijg je een nieuwe die niet aan de oude kan worden gekoppeld.
Het rapport wordt verstuurd bij het opstarten en beschrijft de sessie die al is afgelopen, en nooit bij het afsluiten — een netwerkaanroep bij het afsluiten kan een applicatie laten hangen die iemand probeert te sluiten, en een rapport dat bij het afsluiten wordt geschreven, zou verloren gaan bij precies de gebeurtenis die het meest de moeite waard is om te tellen. Niets in het antwoord wordt gelezen of gebruikt.
De “draait nog”-hartslag
Een rapport dat binnenkomt als de applicatie start, kan zeggen wie haar heeft gestart, maar nooit wie haar nog open heeft. Daarom stuurt FoxSDR, zolang het draait — en alleen zolang gebruiksrapportage aan staat — ook elke vijf minuten één heel klein bericht, met drie velden en verder niets:
| Verstuurd | Voorbeeld | Waarom |
|---|---|---|
| Installatie-identificatie | dezelfde 32 hexadecimale tekens als hierboven | Zodat twaalf hartslagen van één kopie tellen als één draaiende kopie, niet als twaalf. |
| Applicatieversie | 0.99.39 | Zodat “draait nu” per versie kan worden uitgesplitst. |
| Hartslagmarkering | 1 | Vertelt de ontvangende kant dat dit een hartslag is en geen sessierapport. |
Er gaat niets van de sessie mee: geen modes, geen panelen, geen radiomodel, geen duur, geen tellers. Hartslagen worden in een eigen dataset geschreven, gescheiden van de sessierapporten, zodat geen enkel gebruikscijfer van betekenis verandert. Dezelfde schakelaar stopt beide: de verzender weigert te starten zonder geldige installatie-identificatie, en het uitzetten van gebruiksrapportage verwijdert die, dus uit betekent helemaal geen hartslagen. Een hartslag die nog onderweg is als de volgende aan de beurt is, wordt overgeslagen in plaats van in de wachtrij gezet.
Waar de gebruiksrapporten naartoe gaan
Naar een Cloudflare Worker die door dit project wordt beheerd op https://telemetry.foxsdr.com, die de bovenstaande tellers wegschrijft naar een dataset in Cloudflare Workers Analytics Engine. Cloudflare verwerkt die namens ons en bewaart hem drie maanden, waarna hij verdwenen is. Niemand anders ontvangt hem, hij wordt niet verkocht, verhuurd of gedeeld, en het enige wat eruit wordt teruggelezen, zijn geaggregeerde tellingen, via hetzelfde met een wachtwoord beveiligde dashboard dat verderop wordt beschreven. De broncode van de Worker wordt met de applicatie gepubliceerd, zodat je kunt lezen wat de ontvangende kant doet. Crashrapporten gaan niet hierheen — die gaan naar de eigen server van deze site, zoals hierna beschreven.
Crash- en vastloperrapporten
Als FoxSDR crasht of niet meer reageert, schrijft het een rapport dat de fout beschrijft naar %LOCALAPPDATA%\FoxSDR\crashes\ op je eigen computer, en verstuurt het de tekst van het rapport bij de volgende start — nooit vanuit de storing zelf, omdat een programma waarin net een fout is opgetreden niet veilig een netwerkverbinding kan openen. Het gaat naar POST /api/crash op deze website — niet naar Cloudflare, en niet naar een derde partij — en het is anoniem: er is geen account, geen licentiesleutel en niets om mee in te loggen.
De schakelaar is SYSTEEM → Diagnose, en die regelt het schrijven en het versturen in gelijke mate: staat hij uit, dan wordt er geen rapport geschreven, geen map aangemaakt en nooit een verbinding gemaakt. Het is een andere schakelaar dan die voor gebruiksrapportage. Gebruiksrapportage uitzetten houdt een crashrapport niet tegen — het maakt daarin het veld voor de installatie-identificatie leeg, omdat er dan geen identificatie bestaat en een crashrapport er nooit een aanmaakt (zie de laatste rij van de tabel hieronder). Tot deze release noemde de verklaring hierboven de verkeerde schakelaar; de software heeft altijd Diagnose gebruikt, en de twee zeggen nu hetzelfde.
Dit is alles wat een rapport bevat:
| Verstuurd | Voorbeeld | Waarom |
|---|---|---|
| Wat er gebeurde | crash of hang | Een vastloper en een crash zijn verschillende fouten. |
| Foutsignatuur | cascade.exe+0x1a2b/adsb.dll | Groepeert dezelfde fout die door veel mensen wordt gemeld tot één item, zodat honderd meldingen van één bug één ding zijn om op te lossen in plaats van honderd. |
| Applicatieversie, commit en build-id | 0.61.0, 28fa1c2 | In welke build het gebeurde, en welke symbolen erbij horen. |
| Module waarin de fout optrad, en offset | cascade.exe, 0x1a2b | Waar in het programma het misging. |
| Besturingssysteem en architectuur | Windows 11, Linux of Android 14, x64 of arm64 | Fouten zijn vaak specifiek voor één platform. Een rapport van Linux of Android bevat dezelfde velden; de stackframes noemen de GNU-build-id van de bibliotheek waarin de fout optrad in plaats van een PDB-id, omdat geen van beide platforms met MSVC wordt gebouwd. |
| Wat voor storing het was | access violation, 0xC0000005 | De eigen redenregel van het rapport en de uitzonderingscode van Windows. Dit is in het bijzonder wat zegt dat een fout werd opgevangen — de applicatie overleefde hem — in plaats van een crash was; zonder dit zien de twee er identiek uit. Een code en een vaste zin, nooit inhoud. |
| Geladen plug-ins en hun versies | ADS-B 1.1.0 | “Crasht alleen als de ADS-B-plug-in geladen is” is een foutbeschrijving; “crasht soms” is dat niet. |
| Threadstacks | cascade.exe+0x1a2b per frame | De stack is de fout. Het zijn alleen modulenamen, build-id's en numerieke offsets — geen bronpaden, geen variabelen, geen geheugeninhoud. |
| Het einde van het sessielogboek | opened rtlsdr | The last lines the application logged, which is usually what it was doing when it failed. It is the application's own log: it records state changes — source opened, rate set, plugin started — never signal content, and never the name or path of a file you opened. It also carries what the radio driver said and what its libraries printed to the standard error stream. Before any line of it leaves your computer, the application's own lines as well as the driver's, it is scrubbed: serial numbers and the device-specific part of USB device identifiers are replaced by <stripped>, the account name in a file path by <user>, and anything in single quotes, such as the names you give patch nodes and speakers, by '<name>'; on any line that mentions hertz, a frequency, tuning, a centre, a range, an offset, a carrier, a preset or transmitting, every number is replaced by # unless it is marked as a sample rate, a time, a level, a size or a count, is a version, an identifier or an error code, or is part of a name such as R820T; and lines in which the USB driver lists the devices plugged into your computer are left out, with one line saying how many. |
| Contextnotities | mode: WFM, sampleRate: 2400000 | Een paar sleutel/waarde-notities die de applicatie toevoegt: de mode, de bron (generator, I/Q-bestand of een echte radio), de samplerate, of er een apparaat open was, het SDR-model met verwijderde serienummers, hoeveel seconden de applicatie had gedraaid, en of de thread waarin de fout optrad de eigen code van FoxSDR uitvoerde of die van een radiodriver. sampleRate is de samplerate, geen afgestemde frequentie. |
| Installatie-identificatie | 32 willekeurige hexadecimale tekens, of leeg | Gebruikt om het aantal rapporten te begrenzen, en daarna weggegooid: de installatie-identificatie wordt niet opgeslagen. Een computer die in een crashlus zit, mag de server niet kunnen overspoelen, en één computer van honderd onderscheiden is het enige waarvoor dit ooit wordt gelezen. Ze wordt hier nooit naar schijf geschreven. Als gebruiksrapportage uit staat, wordt ze leeg verstuurd — er is dan geen identificatie, en een crashrapport maakt er nooit een aan. |
Corrected in FoxSDR 0.99.33. Before 0.99.33 the scrubbing described above was applied only to the radio driver's lines, not to the application's own, and a few of the application's own lines could therefore reach a crash or freeze report carrying the frequency you had asked for or were transmitting on, a patch radio's label (which can include its serial number), the names you gave patch parts, the first line of text a decoder on the patch page had produced, and the list of USB devices the USB driver printed, including their serial numbers. That contradicted this notice. From 0.99.33 every line is scrubbed before it leaves your computer, and those log lines no longer contain those values in the first place.
Een crashrapport bevat geen frequentie, niets gedecodeerds, geen bestandspad, geen gebruikersnaam, geen computernaam en geen locatie. Rapporten worden bewaard op de eigen server van deze site, achter hetzelfde met een wachtwoord beveiligde dashboard als al het andere, en worden bewaard tot 90 dagen nadat de fout voor het laatst is gezien, en daarna verwijderd — dezelfde drie maanden als waarin de gebruiksrapporten worden bewaard. Het eerste rapport van elke fout wordt volledig bewaard, samen met nog één rapport per build waarin de fout blijft bestaan, tot maximaal drie; elk ander rapport van diezelfde fout wordt geteld in plaats van opgeslagen. Een geautomatiseerde test houdt zowel wat het eindpunt accepteert als wat het naar schijf schrijft in beide richtingen gelijk aan de tabel hierboven, zodat er aan geen van beide een veld kan worden toegevoegd zonder dat ook deze tabel verandert.
Een volledige geheugendump wordt nooit verstuurd, bij geen enkele instelling. Een geheugendump is een kopie van het geheugen van het programma en kan bestandsnamen, venstertitels en ontvangen signaalgegevens bevatten. Hij staat standaard uit; als je hem inschakelt onder SYSTEEM → Diagnose, wordt er een .dmp naast het tekstrapport geschreven, alleen lokaal, en opent de uploader bestanden met de naam crash-*.txt en hang-*.txt en verder niets.
Hoe vaak. Maximaal vijf rapporten per dag van één computer, en dezelfde fout maar één keer per dag, hoe vaak hij ook optreedt — beide limieten worden bijgehouden in je eigen instellingenbestand, zodat een computer in een crashlus uit zichzelf stopt met versturen in plaats van dat hem dat moet worden gezegd, en een rapport dat mislukt, wordt bij latere starts hooguit drie keer opnieuw geprobeerd en daarna met rust gelaten. Een offset in een rapport terugvertalen naar een functienaam vereist de debugdatabase van precies die build, en die blijft op onze eigen computers en wordt nergens naartoe geüpload: de omzetting gebeurt lokaal, niet op de server.
Wat de applicatie nooit verstuurt
- Frequenties waarop je afstemt. Waar iemand naar luistert, is het gevoeligste wat deze software weet, en het wordt nooit verzameld. In het Verenigd Koninkrijk is het onderscheppen van een bericht dat je niet mag ontvangen, of het openbaar maken van de inhoud ervan, strafbaar op grond van sectie 48 van de Wireless Telegraphy Act 2006.
- De namen of paden van bestanden die je opent. De bestandsnaam van een opname is je eigen gegeven — die kan een dienst, een plaats of een frequentie noemen. Als een I/Q-bestand niet opnieuw opent, legt het logboek vast dat het niet opnieuw is geopend; de naam blijft op het scherm, waar je hem al kent.
- Alles wat gedecodeerd is — pagerberichten, vliegtuigen, schepen, beelden, satellietverkeer.
- Je positie, of de positie van iets wat je ontvangt — inclusief de ontvangerpositie die je instelt, die in geen enkel rapport wordt verzonden. Zie hieronder.
- Je IP-adres, of een daarvan afgeleide locatie. Een verzoek bereikt een server noodzakelijkerwijs vanaf een adres, want zo werkt internet; het gebruikseindpunt leest geen verbindingsinformatie en schrijft geen verzoeklogboeken.
- Serienummers van hardware. Het radiomodel is nuttig; het serienummer identificeert jouw specifieke radio, en wordt vóór het versturen verwijderd.
- Je naam, de naam van je computer, je gebruikersaccount, of welk bestandspad dan ook.
- Een volledige geheugendump.
De ontvangerpositie, en de GPS
FoxSDR moet weten waar de ontvanger staat, omdat elke afstand en peiling op de kaart en het radarscherm daarvandaan wordt gemeten. Je kunt de positie intypen, op de kaart aanklikken, of uitlezen van een GPS-ontvanger op een seriële poort.
De positie blijft op je computer. Ze wordt opgeslagen in je eigen instellingenbestand en wordt nooit verzonden — niet in het gebruiksrapport, niet in de hartslag, niet in een crashrapport, nergens. Het uitlezen ervan via een GPS is iets wat jij start: je geeft de poort op en drukt op “Positie van GPS lezen”. De poort wordt alleen vastgehouden tot de eerste fix binnenkomt, en hooguit 60 seconden. Het diagnoselogboek legt de poortnaam, de baudrate, het aantal zinnen en satellieten en eventuele fouten vast — nooit de positie, en nooit de tekst van een NMEA-zin. Een poortveld met iets erin wat er niet uitziet als een poort, wordt gelogd als soort en lengte (“a typed device path, 27 chars”), zodat een bestandspad met je gebruikersnaam erin niet in een rapport kan belanden. Twee geautomatiseerde tests bewaken dit: een tegen de logring, en een tegen het logbestand dat de echte applicatie schreef.
De plug-incatalogus
Er wordt contact opgenomen met de catalogus als je het venster van de plug-inwinkel opent (de eerste keer in een sessie, sinds FoxSDR 0.99.16), telkens als je daarin op NU CONTROLEREN drukt, en als je ervoor kiest iets te installeren. Er wordt bij het opstarten niets opgehaald, het venster gaat niet vanzelf weer open, en geen enkele plug-in werkt zichzelf bij. De catalogus is een bestand dat op GitHub is gepubliceerd (raw.githubusercontent.com), dus dat verzoek bereikt de servers van GitHub, die — zoals bij elk webverzoek — het adres zien waar het vandaan kwam. Er wordt geen identificatie van jou meegestuurd: geen installatie-id, geen cookie, niets wat aan een gebruiksrapport kan worden gekoppeld. Elke download gaat via HTTPS, heeft een maximale grootte, wordt geweigerd bij een redirect naar een andere host, en wordt gecontroleerd tegen de sha256 die in de catalogus is gepubliceerd voordat hij een bestand mag worden. De bron is een instelling: je kunt hem naar een andere catalogus laten wijzen, of naar een index.json op je eigen schijf, en dan wordt er helemaal geen netwerkverzoek gedaan.
Baanelementen van satellieten
De satellietplug-in houdt zijn sets baanelementen actueel door ze op te halen bij de bronnen die in zijn satellite.cfg staan, elke twaalf uur zolang hij geladen is. Deze site bewaart een kopie van die sets baanelementen op GET /tle/all.tle — de groepen stations, amateur en weer van CelesTrak plus NOAA 15, 18 en 19, hier elke twaalf uur vernieuwd — en Satellieten 1.0.4 en later vallen uit zichzelf op dit bestand terug zodra elke bron in satellite.cfg faalt, zodat een computer die door CelesTrak wordt geweigerd ze nog steeds kan volgen. Het bestand hoeft deze site daarvoor niet te noemen; een regel fallback-url none erin schakelt die terugval uit, en refresh-hours 0 schakelt al het ophalen uit. Het verzoek bevat geen identificatie, geen installatie-id en geen cookie, en deze server schrijft er geen analyserecord voor — net als bij de updatecontrole worden alleen paginaweergaven en bestandsdownloads vastgelegd, en de mirror is geen van beide. De sets baanelementen zelf zijn van CelesTrak (celestrak.org), en elk antwoord zegt dat ook.
Opzoekingen in het vliegtuigregister
De optionele plug-in Aircraft Info (Vliegtuiginfo) laat zien wie elk vliegtuig op de kaart is — de registratie, het type en de exploitant. De applicatie doet dit verzoek zelf nooit; het installeren van die plug-in is wat het mogelijk maakt. Vanaf versie 1.1.0 vraagt de plug-in het eerst aan deze site, op GET /api/aircraft/<address>, en stuurt hij alleen het ICAO-adres van zes hexadecimale cijfers van het vliegtuig — het nummer dat het vliegtuig zelf uitzendt — zonder identificatie, zonder installatie-id en zonder cookie. Naar elk toestel wordt één keer gevraagd en het antwoord wordt op je eigen computer bewaard, zodat er niet opnieuw naar wordt gevraagd. Alleen als deze site een vliegtuig niet kent of niet bereikbaar is, vraagt de plug-in het aan api.adsbdb.com, een gratis dienst van een derde partij, zoals eerdere versies altijd deden. De verzameling vliegtuigen die een ontvanger hoort, geeft een ruwe indicatie van waar hij staat, en daarom is de plug-in optioneel en zegt hij dat voordat je hem installeert.
Wat deze server over een opzoeking bewaart: niets per verzoek. Er wordt geen analyserecord geschreven, en noch het vliegtuigadres noch het adres waar het verzoek vandaan kwam, wordt gelogd. Het enige wat wordt bijgehouden, zijn vijf lopende totalen sinds de server voor het laatst is gestart — opzoekingen, gevonden, niet gevonden, ongeldig en begrensd — die het dashboard toont. Om te voorkomen dat iemand de hele tabel kopieert, heeft elk verbindend adres een opzoektegoed dat in het geheugen wordt bijgehouden, precies zoals de andere eindpunten hier dat doen, en dat nooit naar schijf wordt geschreven; het wordt vergeten als de server herstart of als er meer dan tienduizend adressen worden bijgehouden, afhankelijk van wat zich het eerst voordoet.
De antwoorden komen uit de vliegtuigdatabase van het OpenSky Network (opensky-network.org): per toestel de registratie, de typeaanduiding, de fabrikant, het model en, waar vastgelegd, de exploitant. OpenSky biedt die database aan zoals hij is en vraagt gebruikers om te citeren: Matthias Schäfer, Martin Strohmeier, Vincent Lenders, Ivan Martinovic en Matthias Wilhelm, “Bringing Up OpenSky: A Large-scale ADS-B Sensor Network for Research”, in Proceedings of the 13th IEEE/ACM International Symposium on Information Processing in Sensor Networks (IPSN), april 2014. De geregistreerde eigenaar die daar is vastgelegd, wordt niet naar deze site gekopieerd of door deze site aangeboden, omdat dat bij een privévliegtuig de naam van een persoon is; alleen de exploitant, een luchtvaartmaatschappij, luchtmacht of bedrijf, wel.
De browserinterface
FoxSDR kan zijn interface via HTTP aanbieden aan andere computers op je eigen netwerk. Dat staat standaard uit en is aan je eigen computer gebonden tot je dat verandert; voor elke binding daarbuiten is een wachtwoord verplicht, en zonder wachtwoord wordt de bredere binding geweigerd in plaats van geopend. Wachtwoorden worden gehasht opgeslagen (PBKDF2-HMAC-SHA256) en sessies worden ingetrokken zodra de instellingen veranderen. Er is met opzet geen TLS, omdat de applicatie geen cryptobibliotheek linkt en geen transportbeveiliging zal claimen die ze niet kan bieden — zet er een reverse proxy of een privétunnel voor, en stel hem nooit rechtstreeks open via port forwarding. Iedereen aan wie je toegang geeft, kan zien en bepalen wat de ontvanger doet.
Functieverzoeken vanuit de applicatie
De applicatie heeft op de hoofdpagina een vak “FUNCTIE AANVRAGEN”, waarin je kunt typen wat je graag zou willen dat ze doet, en dan op VERSTUREN drukt. Er wordt niets verstuurd tot je op die knop drukt, het gebeurt nooit automatisch, en een verzoek dat ons niet bereikt, wordt niet op de achtergrond in de wachtrij gezet of opnieuw geprobeerd — wat je hebt getypt, blijft in het vak staan, alleen in het geheugen, zodat je opnieuw op VERSTUREN kunt drukken, en het wordt nooit naar het configuratiebestand of het logboek geschreven. Dit is alles wat één verzoek bevat:
| Verstuurd | Voorbeeld | Waarom |
|---|---|---|
| Wat je hebt getypt | Please add a squelch control to the FLEX decoder | Het verzoek zelf: 10 tot 100000 tekens. Stuurtekens worden verwijderd voordat het wordt opgeslagen; regeleinden blijven behouden. |
| Contactgegevens, als je die hebt opgegeven | [email protected] of een roepnaam | Optioneel, tot 120 tekens, zodat we een vervolgvraag kunnen stellen. Laat je het leeg, dan bevat het verzoek niets wat jou zou kunnen identificeren. |
| Applicatieversie | 0.99.39 | Uit welke build het verzoek kwam. |
| Besturingssysteem | windows, linux of android | Welk platform het verstuurde. |
| Architectuur | x64 of arm64 | Zie hierboven. |
| Schemanummer | 1 | De versie van het berichtformaat, zodat een toekomstige wijziging van het formaat niet kan worden aangezien voor een van de velden hierboven. |
Het gaat naar POST /api/feature-request op deze website. Je IP-adres wordt alleen gebruikt om de verzendsnelheid binnen redelijke grenzen te houden, en wordt nooit naar schijf geschreven — wat daadwerkelijk wordt bewaard, is je bericht, je contactadres als je dat hebt opgegeven, de applicatieversie, het platform, de architectuur, en je geschatte land als onze opzoeking dat uit de verbinding kan afleiden, en verder niets. Het wordt gelezen door de beheerder van het project op het beheerdashboard, achter hetzelfde wachtwoord als al het andere hier, en wordt bewaard tot het van dat dashboard wordt verwijderd, of tot je erom vraagt. Een verzoek dat is afgehandeld — toegevoegd aan FoxSDR, of op een andere manier beantwoord — kan daar worden gearchiveerd in plaats van verwijderd, zodat het project kan bijhouden wat er is gevraagd en wat er is gebouwd; een gearchiveerd verzoek wordt nog steeds bewaard, met alles wat hierboven staat. Als je een contactadres hebt opgegeven en wilt dat het verzoek wordt verwijderd, schrijf dan naar het adres hieronder en citeer genoeg van wat je hebt gestuurd om het terug te kunnen vinden.
Bugmeldingen en ongenoegens vanuit de applicatie
Direct onder “FUNCTIE AANVRAGEN” heeft de applicatie een vak “FOUT / ONGENOEGEN MELDEN”, waarin je aangeeft dat er iets stuk is of dat er iets is wat je niet bevalt, en dan op VERSTUREN drukt. Het werkt precies zoals het vak voor functieverzoeken: er wordt niets verstuurd tot je op die knop drukt, er wordt niets op de achtergrond in de wachtrij gezet of opnieuw geprobeerd, en wat je hebt getypt, blijft alleen in het geheugen — nooit in het configuratiebestand, nooit in het logboek. Het is geen crashrapport en bevat niets van wat een crashrapport bevat. Dit is alles wat één melding bevat:
| Verstuurd | Voorbeeld | Waarom |
|---|---|---|
| Of het een bug of een ongenoegen is | bug of dislike | De keuze die je bovenaan het vak hebt gemaakt: iets wat niet werkt, of iets wat werkt zoals bedoeld maar wat je liever anders zou zien. |
| Wat je hebt getypt | The waterfall freezes when I change the sample rate | De melding zelf: 10 tot 100000 tekens. Stuurtekens worden verwijderd voordat ze wordt opgeslagen; regeleinden blijven behouden. |
| Contactgegevens, als je die hebt opgegeven | [email protected] of een roepnaam | Optioneel, tot 120 tekens, zodat we een vervolgvraag kunnen stellen. Laat je het leeg, dan bevat de melding niets wat jou zou kunnen identificeren. |
| Applicatieversie | 0.99.39 | Uit welke build de melding kwam, zodat een bug die al is opgelost niet opnieuw wordt nagejaagd. |
| Besturingssysteem | windows, linux of android | Welk platform het verstuurde. |
| Architectuur | x64 of arm64 | Zie hierboven. |
| Schemanummer | 1 | De versie van het berichtformaat, zodat een toekomstige wijziging van het formaat niet kan worden aangezien voor een van de velden hierboven. |
Ze gaat naar POST /api/problem-report op deze website. Je IP-adres wordt alleen gebruikt om de verzendsnelheid binnen redelijke grenzen te houden, en wordt nooit naar schijf geschreven — wat daadwerkelijk wordt bewaard, is of het een bug of een ongenoegen was, je bericht, je contactadres als je dat hebt opgegeven, de applicatieversie, het platform, de architectuur, en je geschatte land als onze opzoeking dat uit de verbinding kan afleiden, en verder niets. Ze wordt gelezen door de beheerder van het project op het beheerdashboard, achter hetzelfde wachtwoord als al het andere hier, en een melding wordt bewaard tot ze van dat dashboard wordt verwijderd, of tot je erom vraagt. Een melding die is afgehandeld — opgelost in FoxSDR, of op een andere manier beantwoord — kan daar worden gearchiveerd in plaats van verwijderd; een gearchiveerde melding wordt nog steeds bewaard, met alles wat hierboven staat. Als je een contactadres hebt opgegeven en wilt dat de melding wordt verwijderd, schrijf dan naar het adres hieronder en citeer genoeg van wat je hebt gestuurd om haar terug te kunnen vinden.
De website: wat er wordt vastgelegd als je hem bezoekt
Voor elke paginaweergave en elke download wordt een record geschreven, of je nu cookies accepteert of niet. Dit is first-party-analyse: de gegevens blijven op de server die deze site aanbiedt, ze worden niet gedeeld met een advertentienetwerk, en er staat geen script van derden op de pagina.
| Vastgelegd | Waar het vandaan komt | Toestemming nodig |
|---|---|---|
| Datum en tijd, opgevraagde pagina, HTTP-methode en protocol | Het verzoek | Nee |
| Je IP-adres, en een gezouten hash daarvan | De verbinding | Nee |
| Geschatte locatie: land, regio, stad, postcodegebied, tijdzone, en de coördinaten van die stad — niet van jou | IP-adres, opgezocht via ip-api.com | Nee |
| Je netwerk: internetprovider, organisatie, AS-nummer, en of het adres een bekend VPN-, datacenter- of mobiel netwerk is | Dezelfde opzoeking | Nee |
| Browser en versie, besturingssysteem en versie, apparaattype, en of het verzoek op een bot lijkt | User-Agent-header | Nee |
Welke pagina je hierheen stuurde, en eventuele campagnetags op de link (utm_source en consorten) | Referer-header en URL | Nee |
| Voorkeurstalen | Accept-Language-header | Nee |
| Welk bestand je hebt gedownload, de versie ervan, hoeveel bytes er zijn verzonden en of de overdracht is voltooid | De download zelf | Nee |
| Scherm- en venstergrootte, pixelverhouding, kleurdiepte | Je browser, doorgegeven door het script van deze pagina | Ja |
| Aantal CPU-kernen en geschat apparaatgeheugen | Hetzelfde script | Ja |
| Tijdzone, talenlijst, voorkeur voor donkere modus, aanraakondersteuning, platform | Hetzelfde script | Ja |
| Verbindingstype, geschatte downloadsnelheid en round-trip-tijd | Hetzelfde script | Ja |
| Hoe lang de pagina zichtbaar was, hoe ver je hebt gescrold, hoeveel klikken, en op welke knoppen je hebt gedrukt | Hetzelfde script | Ja |
Wat bewust niet wordt gedaan
- Geen browserfingerprinting: geen canvas-, audio-, lettertype- of WebGL-peilingen, en niets wat probeert je opnieuw te identificeren nadat je hebt geweigerd.
- Geen trackers van derden, advertentiepixels, socialemediawidgets of analysediensten. Niets op deze pagina wordt van een ander domein geladen.
- Geen poging om je klembord, je batterij, je camera, je microfoon, je opgeslagen wachtwoorden of je browsegeschiedenis te lezen — waar een downloadpagina allemaal niets te zoeken heeft.
- Je gegevens worden niet verkocht, verhuurd of met wie dan ook gedeeld. Het enige uitgaande verzoek dat de server over jou doet, is de hierboven beschreven opzoeking van IP naar locatie.
Interfaceontwerpen die je publiceert
Deze site kan een FoxSDR-interfaceontwerp bewaren — een .foxui-pakket — dat je kiest te publiceren. Er wordt niets verstuurd voordat je op Publish drukt, en het gaat naar POST /api/gui/publish. Wat bewaard wordt, is wat het pakket bevat: het ontwerp zelf, de naam, versie en beschrijving die je hebt ingevuld, een auteursnaam als je die hebt ingevuld, het tijdstip van publicatie en een willekeurige identificatie. Je IP-adres wordt alleen gebruikt om het publicatietempo binnen redelijke grenzen te houden, en het wordt nooit naar schijf geschreven. Een gepubliceerd pakket wordt nergens vermeld; iedereen die de link heeft, kan het downloaden. Het wordt bewaard totdat het uit het beheerdashboard wordt verwijderd, of totdat je erom vraagt — schrijf naar het adres hieronder en vermeld de link.
Als je je aanmeldt als bètatester
Het bètaformulier en de aanmelding voor nieuws zijn de enige plekken waar deze site je om iets vraagt, afgezien van het publiceren van een interfaceontwerp (zie hierboven). Het versturen ervan slaat je e-mailadres op, en wat je daarnaast hebt willen opgeven: een naam of roepnaam, je platform, de radio die je wilt gebruiken, je notities, en de lijst met functies die je vrijwillig wilt testen. Daarnaast bewaren we dezelfde bezoekcontext als hierboven beschreven — geschatte locatie, netwerk, browser en besturingssysteem — omdat een bugmelding er heel anders uitziet afhankelijk van de opstelling waar ze vandaan komt.
- Het adres wordt voor één ding gebruikt: contact met je opnemen over bètabuilds en wat er getest moet worden. Geen nieuwsbrief, geen marketing, en het wordt nooit aan iemand anders doorgegeven.
- Er gebeurt niets tot je bevestigt. Aanmelden stuurt één e-mail met een zescijferige code, die je op de pagina intypt om te bevestigen dat het adres van jou is. De code werkt 30 minuten en wordt na vijf verkeerde pogingen geweigerd. Tot hij is ingevoerd, doet de inschrijving niets: je staat niet op de testerslijst, je wordt niet meegeteld, en er wordt nooit iets verder verstuurd. Als iemand anders jouw adres heeft ingetypt, negeer die e-mail dan en de inschrijving wordt nooit echt — er is niets om je voor af te melden en je hoeft niets te doen. Dat ene bericht is de enige automatische e-mail die een aanmelding kan opleveren.
- Als je ons hebt geschreven, kunnen we je uitnodigen. Iemand die ons heeft geschreven en een adres heeft achtergelaten — bijvoorbeeld via het functieverzoekvak van de applicatie — kan één persoonlijke uitnodiging van ons krijgen, met een eenmalige link die de toets Bevestigen van deze site opent. Die uitnodiging wordt bewaard als openstaande inschrijving, precies zoals een onbevestigde aanmelding: je bent geen tester en wordt niet meegeteld, tenzij je op Bevestigen drukt, en als je haar negeert, schrijven we je niet opnieuw. Een openstaande inschrijving verloopt niet vanzelf; ze wordt verwijderd als wij haar van de lijst halen of als jij erom vraagt, met één e-mail naar het adres hieronder.
- Nadat je hebt bevestigd, krijg je je persoonlijke beheerlink, en schrijven we je als er een build verschijnt die nodig heeft wat jij hebt aangeboden te testen. Dan schrijft een mens je, geen mailinglijst. Als je de link kwijtraakt, kunnen we je een nieuwe geven: de oude werkt meteen niet meer, de nieuwe krijg je per e-mail, en we bewaren wanneer dat gebeurde en of de e-mail is verstuurd.
- Die e-mail gaat via Apple. E-mail voor
foxsdr.comwordt afgehandeld door de iCloud Mail-dienst van Apple, dus je adres en het bericht gaan onderweg naar jou via hun servers, onder hun voorwaarden als onze e-mailprovider. Er wordt verder niets over jou naar hen gestuurd. - Het wordt gescheiden gehouden van de analysegegevens. Aanmeldingen staan in een eigen bestand, dat alleen leesbaar is voor het account waaronder de server draait; het analyselogboek legt vast dat er een aanmelding plaatsvond en hoeveel functies er werden gekozen, nooit wie. Een geautomatiseerde test laat de build falen als er ooit een adres in het analyselogboek terechtkomt.
- Opnieuw aanmelden met een adres dat al op de lijst staat, verandert die inschrijving niet. Wijzigingen doe je op je eigen testerpagina. In plaats daarvan krijgt het adres één e-mail: de persoonlijke link als het bevestigd is, of een nieuwe code als dat niet zo is, en nooit vaker dan eens per 15 minuten.
- We bewaren een kopie van wat we je hebben gestuurd. Elk bericht dat deze site een tester stuurt — de bevestiging, en elk bericht over een build — wordt met zijn tekst bewaard, zodat we kunnen zien wat er is gezegd en of het is aangekomen. De kopie wordt opgeslagen onder je interne id, niet onder je adres, en de persoonlijke delen ervan (de bevestigingscode of -link, en je eigen beheerlink) worden verwijderd voordat ze wordt opgeslagen, zodat een bewaard bericht nooit kan worden gebruikt om als jou op te treden. Deze kopieën worden samen met de rest van je inschrijving verwijderd als je vertrekt.
- Berichten tussen jou en ons worden bewaard. Het vak Berichten in je testersportaal is een gesprek met de persoon die FoxSDR bouwt: wat wij je schrijven en wat jij terugschrijft, elk met het tijdstip waarop het is geschreven en, als je er een koos, de melding waar het over gaat. Het wordt opgeslagen onder je interne id, niet onder je adres, en alleen jij (met je persoonlijke link) en wij kunnen het lezen. We houden ook bij wanneer je onze berichten op je scherm hebt gehad, zodat we weten dat ze zijn aangekomen. Zolang je pagina open is, vraagt die om de paar seconden om nieuwe berichten, zodat ze verschijnen zodra ze geschreven zijn, en geeft ze door hoe lang geleden je de pagina voor het laatst gebruikte; zolang ze blijft vragen, en een halve minuut daarna, en alleen als je haar de afgelopen vijf minuten hebt gebruikt, weet de server dat je er bent. Dat wordt alleen in zijn geheugen bewaard en nooit opgeschreven. We sturen je niet voor elk bericht een e-mail: als we schrijven terwijl je er niet bent, krijg je één korte e-mail dat er een bericht op je wacht, met je link en zonder het bericht zelf. Zolang dat bericht ongelezen is, volgt er tot 12 uur lang geen andere zulke e-mail, en nooit binnen een halfuur na de vorige; en als je op de pagina was toen we schreven maar het bericht tien minuten later nog niet hebt gezien, gaat de e-mail dan. Een kopie van die e-mail wordt bewaard zoals hierboven beschreven; als jij schrijft, wordt er geen e-mail verstuurd. Het gesprek wordt bewaard tot je vertrekt of ons vraagt het te verwijderen, en vertrekken verwijdert het helemaal.
- Bewaard tot het bètaprogramma afloopt, of tot je erom vraagt. Eén e-mail naar het adres hieronder haalt je eraf en verwijdert de inschrijving — je hoeft geen reden op te geven.
- De rechtsgrond hier is je toestemming, die je geeft door het vakje aan te vinken; het formulier wordt zonder die toestemming niet verzonden.
Als je je aanmeldt voor nieuws per e-mail
De nieuwspagina vraagt om één ding: je e-mailadres. Het wordt bewaard zodat we je kunnen mailen als er een nieuwe versie van FoxSDR is, en af en toe over wat er wordt gebouwd. Het wordt nergens anders voor gebruikt en nooit aan iemand doorgegeven.
- Er gebeurt niets tot je bevestigt. Aanmelden stuurt één e-mail met een zescijferige code om op de pagina in te typen. Tot die is ingevoerd, wordt er niets anders verstuurd, en een adres dat niet binnen een week is bevestigd, wordt verwijderd - door code die elke dag op de server draait. Als iemand anders jouw adres heeft ingetypt, negeer die e-mail dan.
- Elke e-mail bevat een link waarmee je van de lijst af gaat, met één druk. Vertrekken verwijdert het adres uit het bestand op de server, samen met de kopieën die we hebben bewaard van wat ernaar is gestuurd; er wordt niets over bewaard.
- Het is een eigen lijst. Een nieuwsabonnee is geen bètatester: het adres wordt in een apart bestand bewaard, dat alleen leesbaar is voor het account waaronder de server draait, en wordt niet als tester meegeteld of getoond. Als je ook tester bent, krijg je elk bericht één keer.
- We bewaren een kopie van wat we je hebben gestuurd, opgeslagen onder een interne id in plaats van je adres, met de bevestigingscode en de afmeldlink verwijderd, precies zoals bij testers.
- Die e-mail gaat via Apple, zoals hierboven voor testers beschreven.
- Het analyselogboek legt vast dat er een aanmelding plaatsvond, nooit wie.
- De rechtsgrond is je toestemming, die je geeft door het vakje aan te vinken; het formulier wordt zonder die toestemming niet verzonden.
Cookies
| Cookie | Doel | Levensduur |
|---|---|---|
fox_consent | Onthoudt of je hebt geaccepteerd of geweigerd, zodat het je maar één keer wordt gevraagd | 1 jaar (geaccepteerd) / 6 maanden (geweigerd) |
fox_vid | Een willekeurige identificatie, zodat een terugkerend bezoek als dezelfde browser wordt herkend. Alleen geplaatst als je accepteert. | 400 dagen |
fox_sid | Groepeert één bezoek tot een sessie. Alleen geplaatst als je accepteert. | 30 minuten inactiviteit |
fox_beta | Bewaart je bètatesterlink, zodat je terug kunt naar je eigen inschrijving. Alleen geplaatst als je je als tester aanmeldt, en alleen omdat dat is waar je om vroeg — hij meet niets, dus hij valt niet onder de analysekeuze hierboven. Jezelf verwijderen wist hem. | 400 dagen |
foxsdr_lang | Onthoudt de taal die je voor deze site hebt gekozen, zodat de volgende pagina ook in die taal is. Alleen geplaatst als je zelf een taal kiest — met de taalkeuze of een link met ?lang= — en hij bevat niets anders dan de code van die taal, zoals es. Hij meet niets, dus hij valt niet onder de analysekeuze hierboven. | 1 jaar |
fox_news_joined | Geen cookie: een vlag in de eigen opslag van je browser, die nooit naar ons wordt gestuurd. Na een download vraagt de site of je het nieuws per e-mail wilt ontvangen; zodra je je vanuit deze browser hebt aangemeld en bevestigd, houdt hij op met vragen. De vlag bevat niets anders dan 1, en alleen als je je hebt aangemeld. | Tot je de gegevens van deze site wist |
Als je weigert, wordt er geen identificerende cookie geplaatst. Bezoeken worden dan gegroepeerd via een dagelijks wisselende hash van je adres en browser, die bezoekers onderscheidt om te kunnen tellen en niet bruikbaar is om je van dag tot dag of tussen sites te volgen. Je kunt van gedachten veranderen door de cookies van deze site te wissen en de pagina opnieuw te laden.
Welke taal je ziet
De pagina's kunnen in andere talen dan het Engels worden getoond. Welke je krijgt, wordt op de server bepaald voor elke pagina die je opvraagt, in deze volgorde: een taal die je zelf hebt gekozen (de cookie foxsdr_lang hierboven, of ?lang= in de link); anders de talen waarvan je browser zegt dat je ze verkiest, uit de header Accept-Language; anders de hoofdtaal van het land waar je verbinding vandaan komt, die Cloudflare, het netwerk vóór deze site, met het verzoek meestuurt als landcode van twee letters (CF-IPCountry); anders Engels. Er wordt niets opgeslagen om die keuze te maken: de header en de landcode worden voor dat ene antwoord gelezen en daarvoor niet bewaard. Het zijn dezelfde twee dingen die de tabel hierboven al vermeldt als vastgelegd bij elke paginaweergave, waarbij de landcode wordt gebruikt als onze eigen adresopzoeking geen antwoord heeft. De vertalingen zijn machinaal gemaakt, en voor deze verklaring en de licenties is de Engelse tekst bindend.
Waarom, en op welke grondslag
Het doel is beperkt: weten hoeveel mensen dit project vinden, ongeveer waar ze zijn, waarop ze het draaien, en hoeveel het vervolgens downloaden. Dat bepaalt of het werk doorgaat en wat er daarna wordt gebouwd.
De registraties aan de serverkant worden bewaard op grond van gerechtvaardigde belangen bij het begrijpen en beveiligen van de site. De door de browser doorgegeven details en de identificerende cookies worden bewaard op grond van je toestemming; daarom zitten ze achter de banner en kost weigeren je op deze site niets.
Hoe lang het wordt bewaard, en wie het ziet
Registraties worden 24 maanden bewaard en daarna verwijderd. Ze staan in een bestand op de server, achter een met een wachtwoord beveiligd dashboard dat alleen de beheerder van het project kan openen. Er zijn geen andere ontvangers en er is geen doorgifte naar een derde land, afgezien van de al beschreven IP-opzoeking.
Twee dingen worden korter bewaard. Crash- en vastloperrapporten worden 90 dagen nadat de fout die ze beschrijven voor het laatst is gezien verwijderd, en de gebruiksrapporten die Cloudflare verwerkt, worden na drie maanden verwijderd. Elk van die termijnen wordt afgedwongen door code die elke dag op de server draait, niet doordat iemand eraan denkt.
Je rechten
Als je in het VK of de EU bent, kun je vragen om een kopie van wat er over je wordt bewaard, vragen om correctie of verwijdering daarvan, of bezwaar maken tegen het verzamelen ervan — inclusief de registraties aan de serverkant die niet van toestemming afhangen. De praktische identificatie om je registraties te vinden, is je IP-adres op het moment van je bezoek, dus vermeld dat, en ongeveer wanneer je de site bezocht.
Voor de applicatie zitten de bedieningselementen in de software zelf, en het zijn er drie:
- SYSTEEM → Gebruiksrapportage stopt het gebruiksrapport en de hartslag van elke vijf minuten, en verwijdert de installatie-identificatie. Zet je het later weer aan, dan krijg je een nieuwe identificatie die niet aan de oude kan worden gekoppeld.
- SYSTEEM → Diagnose zorgt dat er geen crash- en vastloperrapporten meer worden geschreven of verstuurd.
- SYSTEEM → Updates stopt de updatecontrole.
De rapporten bevatten niets wat met jou in verband kan worden gebracht, dus er is niets om inzage in te vragen; als je wilt dat een installatie-identificatie wordt verwijderd uit rapporten die al zijn verstuurd, schrijf dan naar het adres hieronder en vermeld die, en ze wordt verwijderd.
Kinderen. FoxSDR is een technisch instrument voor radiohobbyisten. Het is niet op kinderen gericht, het verzamelt van niemand persoonsgegevens, en verzamelt er dus ook geen van kinderen.
Schrijf naar [email protected]. Je kunt ook een klacht indienen bij het Information Commissioner's Office (ico.org.uk) als je vindt dat hier slecht mee is omgegaan.
Laatst bijgewerkt op 24 september 2026, op basis van FoxSDR 0.99.39 — de build die deze site nu aanbiedt, en de build waarvan de broncode is gebruikt om elke bewering hierboven te controleren. FoxSDR wordt uitgegeven door Steven Fox; schrijf naar het adres hierboven met vragen over deze verklaring of om een installatie-identificatie te laten verwijderen uit rapporten die al zijn verstuurd. Als deze verklaring ooit niet meer overeenkomt met wat de software doet, dan zit de software fout — de gegevensverzameling van de website is geïmplementeerd in store.go en app.js, beide leesbaar in de eigen broncode van de site, en de eigen lijst van de applicatie wordt meegeleverd als PRIVACY.md, met een test die de payload daaraan houdt.