隐私和 Cookie
本声明涵盖两件不同的事:你安装的 FoxSDR 应用程序,以及本网站。二者出于不同原因收集不同的数据,下面分别说明——先说应用程序,因为那是在你自己机器上运行的部分。本声明力求完整而非简短:二者存储的每一个字段都已列出,包括大多数声明会略去的那些。
应用程序:它发送什么
没有账户、没有许可证密钥、无需激活,而且FoxSDR 从不报告任何有关你收听内容的信息。它自行发出的网络请求恰好有四种:更新检查;匿名使用情况报告,以及应用程序打开期间一个很小的“仍在运行”心跳;发生故障后的崩溃或卡死报告;以及——仅当你打开插件商店或在其中按“立即检查”时——对插件目录的请求。下面逐字段说明每一种,每一种都可以关闭。控制它们的开关有三个:系统 → 更新、系统 → 使用情况报告和系统 → 诊断。没有任何功能依赖于其中任何一个处于开启状态,关闭它们也不会有任何提示来烦你。
哪些内容留在你的机器上
你的录音(包括音频和原始 I/Q)、SSTV 和气象卫星解码器生成的图像、解码器解出的一切内容、你的书签、频段规划、设置、接收机位置以及已安装的插件,都是你自己磁盘上的文件。没有任何东西会上传它们,你调谐的任何频率都不会离开你的机器。
更新检查
每次启动时,应用程序会询问本网站是否有更新的版本。整个请求就是 GET /api/update?v= 后跟你正在运行的版本——没有标识符、没有安装 ID、没有 Cookie,也没有任何可以与之后的请求关联起来的东西。本服务器不会为它写入任何统计记录:只记录页面浏览和文件下载,而更新端点两者都不是。在系统 → 更新中关闭它,应用程序就再也不会联系该服务。
除非你按下按钮,否则不会下载或安装任何东西。如果你按下了,安装程序会通过 HTTPS 从本网站获取,并在文件被赋予任何程序都能运行的名称之前,对照服务器公布的摘要检查其 SHA-256——而这次获取是从本网站进行的普通下载,因此会像其他下载一样被记录,包括本声明网站部分所述的 IP 地址、大致位置、浏览器和操作系统。
使用情况报告
从 0.53.0 版起,系统 → 使用情况报告中提供匿名使用情况报告。它默认开启,你可以将其关闭——取消勾选该框,报告会立即停止。每次启动发送一份报告,描述刚刚结束的会话,以下就是它的全部内容:
| 发送的内容 | 示例 | 原因 |
|---|---|---|
| 安装标识符 | 32 个随机十六进制字符 | 区分 100 个用户和一个用户启动了 100 次。首次运行时在你的机器上随机生成,在你关闭报告时删除,并且从不根据你的硬件、网络或姓名生成。 |
| 应用程序版本 | 0.99.39 | 用户是否会更新。Android Alpha 版会将自己的构建报告为 0.98.1-android.4——在其所基于的发布版本号后加上 -android.N 后缀,这样它的报告就绝不会与 Windows 安装程序的报告混淆。 |
| 操作系统 | Windows 10.0.22631、Linux 6.8.0 或 Android 14 | 实际使用了哪些平台。操作系统及其构建号、内核或发行版本号,从不包括你机器的名称或你的用户账户。Linux 构建(0.99.39)和 Android Alpha 版(0.98.1-android.4)在同一个开关下发送相同的字段。 |
| 架构 | x64 或 arm64 | 同上。 |
| 启动次数 | 12 | 软件是否被使用了不止一次。 |
| 崩溃次数 | 1 | 它多久出一次故障。 |
| 会话时长 | 3600 秒 | 会话是几分钟还是几小时。 |
| SDR 型号 | uhd b200 | 优先支持哪些 SDR。发送前会去除序列号。 |
| 使用过的解调器及使用时长 | WFM: 3000s | 哪些模式值得进一步投入。 |
| 打开过的面板 | map, decoded | 哪些功能被使用。 |
| 已安装的插件 | ADS-B 1.0.0 | 哪些解码器值得进一步投入。 |
这就是完整的列表。它作为 PRIVACY.md 随应用程序一起提供,一项自动化测试会逐字段检查有效载荷,因此不可能在不让该测试失败、不同时更新两份文档的情况下添加新字段。关闭报告会删除安装标识符,因此如果你以后重新开启,会得到一个无法与旧标识符关联的新标识符。
报告在启动时发送,描述已经结束的会话,从不在退出时发送——退出时的网络调用可能让一个用户正试图关闭的应用程序卡住,而在退出时写入的报告,恰恰会因最值得统计的那种事件而丢失。回复中的任何内容都不会被读取,也不会据以执行任何操作。
“仍在运行”心跳
在应用程序启动时到达的报告,只能说明谁启动了它,永远无法说明谁仍然开着它。因此,在 FoxSDR 运行期间——并且仅当使用情况报告开启时——它还会每隔五分钟发送一条非常小的消息,其中包含三个字段,别无其他:
| 发送的内容 | 示例 | 原因 |
|---|---|---|
| 安装标识符 | 与上面相同的 32 个十六进制字符 | 这样,同一副本发出的十二次心跳计为一个正在运行的副本,而不是十二个。 |
| 应用程序版本 | 0.99.39 | 这样,“当前正在运行”的数量可以按版本细分。 |
| 心跳标记 | 1 | 告诉接收端这是一次心跳,而不是会话报告。 |
会话中的任何内容都不会随之发送:没有模式、没有面板、没有 SDR 型号、没有时长、没有计数器。心跳写入一个单独的数据集,与会话报告分开保存,因此任何使用数据的含义都不会改变。同一个开关会同时停止两者:没有有效的安装标识符,发送器就拒绝启用,而关闭使用情况报告会删除该标识符,因此关闭就意味着完全没有心跳。如果下一次心跳到期时上一次仍在发送中,则跳过而不是排队。
使用情况报告发往何处
发往本项目运营的一个 Cloudflare Worker,地址为 https://telemetry.foxsdr.com,它将上述计数写入一个 Cloudflare Workers Analytics Engine 数据集。Cloudflare 代表我们处理这些数据,并存储三个月,之后即被删除。没有其他任何人会收到这些数据,不会出售、出租或共享,从中读取的只有汇总计数,通过下文所述的同一个受密码保护的仪表板进行。该 Worker 的源代码随应用程序一起发布,因此你可以查看接收端做了什么。崩溃报告不发往这里——它们发往本网站自己的服务器,详见下文。
崩溃和卡死报告
如果 FoxSDR 崩溃或停止响应,它会在你自己的机器上把描述故障的报告写入 %LOCALAPPDATA%\FoxSDR\crashes\,并在下次启动时发送报告文本——从不在故障发生的过程中发送,因为刚刚出错的程序无法安全地打开网络连接。报告发往本网站的 POST /api/crash——不发往 Cloudflare,也不发往任何第三方——并且是匿名的:没有账户、没有许可证密钥,也没有任何需要登录的东西。
对应的开关是“系统 → 诊断”,它同样控制报告的写入和发送:关闭时不会写入任何报告、不会创建任何文件夹,也永远不会建立任何连接。它与使用情况报告是不同的开关。关闭使用情况报告并不会阻止崩溃报告——只会让崩溃报告中的安装标识符字段为空,因为此时不存在标识符,而崩溃报告从不生成标识符(参见下表最后一行)。在此版本之前,上面的声明写错了开关名称;软件一直使用的是“诊断”,现在两者说法一致了。
一份报告包含的全部内容如下:
| 发送的内容 | 示例 | 原因 |
|---|---|---|
| 发生了什么 | crash 或 hang | 卡死和崩溃是不同的故障。 |
| 故障签名 | cascade.exe+0x1a2b/adsb.dll | 把许多人报告的同一个故障归为一个条目,这样一个缺陷的一百份报告就是一件要修复的事,而不是一百件。 |
| 应用程序版本、提交和构建 ID | 0.61.0, 28fa1c2 | 故障发生在哪个构建中,以及与哪些符号相匹配。 |
| 出错模块和偏移量 | cascade.exe, 0x1a2b | 程序在哪里出了错。 |
| 操作系统和架构 | Windows 11、Linux 或 Android 14,x64 或 arm64 | 故障常常只出现在某一个平台上。Linux 或 Android 报告携带相同的字段;堆栈帧中给出的是出错库的 GNU 构建 ID 而不是 PDB ID,因为这两个平台都不使用 MSVC 构建。 |
| 故障属于哪一类 | access violation, 0xC0000005 | 报告自身的原因行和 Windows 异常代码。尤其是,正是它表明一个故障是被吸收的——应用程序挺过来了——而不是一次崩溃;没有它,二者看起来完全相同。只有一个代码和一句固定的话,从不包含内容。 |
| 已加载的插件及其版本 | ADS-B 1.1.0 | “只在加载了 ADS-B 插件时崩溃”是对故障的描述;“有时会崩溃”则不是。 |
| 线程堆栈 | 每帧 cascade.exe+0x1a2b | 堆栈就是故障本身。它只包含模块名称、构建 ID 和数字偏移量——没有源码路径、没有变量、没有内存内容。 |
| 会话日志的末尾 | 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. |
| 上下文注释 | mode: WFM, sampleRate: 2400000 | 应用程序附加的几条键/值注释:模式、信号源(信号发生器、I/Q 文件或真实 SDR)、采样率、是否打开了设备、去除了序列号的 SDR 型号、应用程序已运行了多少秒,以及出错的线程当时运行的是 FoxSDR 自己的代码还是 SDR 驱动的代码。sampleRate 是采样率,不是调谐频率。 |
| 安装标识符 | 32 个随机十六进制字符,或为空 | 用于限制发送频率,随后即被丢弃:安装标识符不会被存储。陷入崩溃循环的机器绝不能淹没服务器,而区分一台机器和一百台机器是读取它的唯一目的。它从不写入这里的磁盘。如果使用情况报告已关闭,则发送空值——此时不存在标识符,崩溃报告也从不生成标识符。 |
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.
崩溃报告不包含频率、解码内容、文件路径、用户名、机器名称和位置。报告保存在本网站自己的服务器上,位于与其他所有内容相同的受密码保护的仪表板之后,并且在该故障最后一次出现后保留 90 天,然后删除——与使用情况报告的保留期同为三个月。任何一个故障的第一份报告会完整保留,此外该故障延续到的每个构建再各保留一份,最多三份;同一故障的其他所有报告只计数而不存储。一项自动化测试双向核对该端点接受的内容和写入磁盘的内容与上表是否一致,因此不修改此表,就无法向任何一方添加字段。
在任何设置下都绝不发送完整内存转储。内存转储是程序内存的副本,可能包含文件名、窗口标题和接收到的信号数据。它默认关闭;如果你在“系统 → 诊断”中开启它,会在文本报告旁边写入一个 .dmp,仅保存在本地,而上传程序只打开名为 crash-*.txt 和 hang-*.txt 的文件,别无其他。
发送频率。每台机器每天最多发送五份报告,同一故障无论发生多少次每天只发送一次——这两项限制都保存在你自己的设置文件中,因此陷入崩溃循环的机器会自行停止发送,而无需被告知;发送失败的报告会在之后的启动中最多重试三次,然后不再处理。要把报告中的偏移量还原为函数名,需要该确切构建的调试数据库,它只保存在我们自己的机器上,从不上传到任何地方:解析在本地进行,而不是在服务器上。
应用程序从不发送的内容
- 你调谐的频率。一个人收听什么,是本软件所知道的最敏感的信息,它从不被收集。在英国,截收你无权接收的消息或泄露其内容,属于违反 2006 年《无线电报法》(Wireless Telegraphy Act)第 48 条的犯罪行为。
- 你打开的文件的名称或路径。录音的文件名是你自己的数据——它可能指明某项无线电业务、某个地点或某个频率。当 I/Q 文件无法重新打开时,日志只记录它未能重新打开;名称留在屏幕上,而你本来就知道它。
- 任何解码内容——寻呼消息、飞机、船舶、图像、卫星通信。
- 你的位置,或你接收到的任何东西的位置——包括你设置的接收机位置,它从不在任何报告中发送。见下文。
- 你的 IP 地址,或由其推断出的任何位置。请求到达服务器时必然带有一个来源地址,因为互联网就是这样工作的;使用情况端点不读取任何连接信息,也不写入任何请求日志。
- 硬件序列号。SDR 型号是有用的信息;序列号则能识别你的那一台 SDR,因此在发送前会被去除。
- 你的姓名、你机器的名称、你的用户账户,或任何文件路径。
- 完整内存转储。
接收机位置,以及 GPS
FoxSDR 需要知道接收机在哪里,因为地图和雷达显示器上的每一个距离和方位都是从它开始测量的。你可以手动输入、在地图上点击,或者从串口上的 GPS 接收机读取。
位置保留在你的机器上。它保存在你自己的设置文件中,从不发送——不在使用情况报告中,不在心跳中,不在崩溃报告中,任何地方都不。从 GPS 读取位置是由你发起的:你指定端口并按下“从 GPS 读取位置”。端口只保持占用到第一次定位到达为止,最长 60 秒。诊断日志记录端口名称、波特率、语句数和卫星数以及任何错误——从不记录位置,也从不记录 NMEA 语句的文本。如果端口字段中填入的内容看起来不像端口,则只记录其类型和长度(“a typed device path, 27 chars”),因此含有你用户名的文件路径不可能混入报告。有两项自动化测试对此把关:一项针对日志环形缓冲区,另一项针对真实应用程序写出的日志文件。
插件目录
在你打开插件商店窗口时(自 FoxSDR 0.99.16 起为每次会话中的第一次)、每当你在其中按立即检查时,以及在你选择安装某个插件时,会联系目录。启动时不会获取任何内容,窗口不会自行重新打开,也没有任何插件会自行更新。目录是发布在 GitHub 上的一个文件(raw.githubusercontent.com),因此该请求会到达 GitHub 的服务器,而它们——像任何网络请求一样——能看到请求来自哪个地址。请求中不会发送你的任何标识符:没有安装 ID、没有 Cookie,也没有任何可以与使用情况报告关联的东西。每次下载都使用 HTTPS、限制大小、遇到跨主机重定向即拒绝,并且在允许成为文件之前,要对照目录中公布的 sha256 进行验证。来源是一项设置:你可以将它指向另一个目录,或指向你自己磁盘上的 index.json,这种情况下完全不会发出网络请求。
卫星轨道根数
卫星插件在加载期间每十二小时从其 satellite.cfg 中列出的来源获取一次轨道根数,以保持数据最新。本网站在 GET /tle/all.tle 保存了这些轨道根数的副本——CelesTrak 的空间站、业余卫星和气象卫星分组,外加 NOAA 15、18 和 19,每十二小时在这里刷新一次——每当 satellite.cfg 中的所有来源都失败时,卫星插件 1.0.4 及更高版本会自动回退到这个文件,这样即使某台机器被 CelesTrak 拒绝,仍然可以跟踪这些卫星。即使该文件中没有写明本网站,这种回退也会发生;其中写有 fallback-url none 的一行会关闭回退,refresh-hours 0 则会关闭所有获取。该请求不携带任何标识符、安装 ID 或 Cookie,本服务器也不会为它写入任何统计记录——与更新检查一样,只记录页面浏览和文件下载,而这个镜像两者都不是。轨道根数本身属于 CelesTrak(celestrak.org),每个响应中都注明了这一点。
飞机注册信息查询
可选的飞机信息插件会显示地图上每架飞机的身份——注册号、机型和运营方。应用程序本身从不发出这种请求;是安装该插件才启用了它。从 1.1.0 版起,该插件会首先向本网站 GET /api/aircraft/<address> 查询,并且只发送飞机的六位十六进制 ICAO 地址——即飞机自己广播的编号——不带任何标识符、安装 ID 或 Cookie。每架飞机只查询一次,答案保存在你自己的机器上,因此不会再次查询。只有当本网站不认识某架飞机或无法访问时,插件才会查询 api.adsbdb.com——一个免费的第三方服务,早期版本一直是这样做的。一台接收机能收到的飞机集合可以粗略反映它所在的位置,这就是该插件为可选、并在你安装前加以说明的原因。
本服务器对查询保存的内容:不保存任何逐次请求的记录。不写入任何统计记录,飞机地址和请求来源地址都不记录。唯一的记录是自服务器上次启动以来的五个累计总数——查询、找到、未找到、格式错误和被限速——显示在仪表板上。为防止有人整表复制,每个连接地址都有一个保存在内存中的查询额度,与这里的其他端点完全相同,并且从不写入磁盘;服务器重启时,或正在跟踪的地址超过一万个时(以先发生者为准),它就会被遗忘。
答案来自 OpenSky Network 飞机数据库(opensky-network.org):每架飞机的注册号、机型代码、制造商、型号,以及在有记录时的运营方。OpenSky 按原样提供该数据库,并要求使用者引用:Matthias Schäfer, Martin Strohmeier, Vincent Lenders, Ivan Martinovic and 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。其中记录的登记所有人不会被复制到本网站,也不会由本网站提供,因为对于私人飞机而言,那是一个人的名字;只有运营方——航空公司、空军或公司——才会被复制和提供。
浏览器界面
FoxSDR 可以通过 HTTP 向你自己网络中的其他机器提供其界面。它默认关闭,在你更改之前只绑定到你自己的机器;任何超出此范围的绑定都需要密码,没有密码时,更宽的绑定会被拒绝而不是打开。密码以哈希形式存储(PBKDF2-HMAC-SHA256),设置更改时会话一律撤销。这里刻意没有 TLS,因为应用程序不链接任何加密库,也不会声称自己具备它无法提供的传输安全——请在它前面放置反向代理或私有隧道,绝不要直接对它做端口转发。你授予访问权限的任何人,都能看到并控制接收机正在做的事。
从应用程序发送的功能请求
应用程序主页上有一个“请求功能”框,你可以在其中输入希望它做什么,然后按“发送”。在你按下该按钮之前不会发送任何内容,它从不自动发送;未能送达的请求不会在后台排队或重试——你输入的内容会留在框中,仅保存在内存里,等你再次按“发送”,并且从不写入配置文件或日志。一次请求携带的全部内容如下:
| 发送的内容 | 示例 | 原因 |
|---|---|---|
| 你输入的内容 | Please add a squelch control to the FLEX decoder | 请求本身:10 到 100000 个字符。存储前会删除控制字符;保留换行。 |
| 联系方式(如果你提供了) | [email protected] 或呼号 | 可选,最多 120 个字符,以便我们提出后续问题。留空的话,请求中就不包含任何可以识别你的信息。 |
| 应用程序版本 | 0.99.39 | 请求来自哪个构建。 |
| 操作系统 | windows、linux 或 android | 由哪个平台发送。 |
| 架构 | x64 或 arm64 | 同上。 |
| 格式版本号 | 1 | 线路协议的版本,这样将来对格式的改动就不会被误认为是上面的某个字段。 |
它发往本网站的 POST /api/feature-request。你的 IP 地址仅用于把发送频率限制在合理范围内,并且从不写入磁盘——实际保存的记录是你的消息、你提供的联系地址(如有)、应用程序版本、平台、架构,以及我们的查询能根据连接给出时你所在的大致国家/地区,别无其他。它由项目维护者在管理仪表板上阅读,受与这里其他所有内容相同的密码保护,并且会一直保留,直到从该仪表板中删除,或直到你提出要求。已处理的请求——已添加到 FoxSDR,或以其他方式答复——可能会在那里归档而不是删除,以便项目记录人们要求过什么、实现了什么;归档的请求仍会被保存,包括上面列出的所有内容。如果你提供了联系地址并希望删除该请求,请写信到下面的地址,并引用足够多的原文以便找到它。
从应用程序发送的缺陷报告和不喜欢反馈
在“请求功能”正下方,应用程序有一个“报告缺陷 / 不喜欢”框,你可以在其中说明某些东西坏了,或者某些东西你不喜欢,然后按“发送”。它的工作方式与功能请求框完全相同:在你按下该按钮之前不会发送任何内容,不会在后台排队或重试,你输入的内容只保存在内存中——从不写入配置文件,也从不写入日志。它不是崩溃报告,也不包含崩溃报告所包含的任何内容。一份报告携带的全部内容如下:
| 发送的内容 | 示例 | 原因 |
|---|---|---|
| 是缺陷还是不喜欢 | bug 或 dislike | 你在框顶部所做的选择:某个功能不能正常工作,或者某个功能按设计工作,但你宁愿它不是这样。 |
| 你输入的内容 | The waterfall freezes when I change the sample rate | 报告本身:10 到 100000 个字符。存储前会删除控制字符;保留换行。 |
| 联系方式(如果你提供了) | [email protected] 或呼号 | 可选,最多 120 个字符,以便我们提出后续问题。留空的话,报告中就不包含任何可以识别你的信息。 |
| 应用程序版本 | 0.99.39 | 报告来自哪个构建,以免追查一个已经修复的缺陷。 |
| 操作系统 | windows、linux 或 android | 由哪个平台发送。 |
| 架构 | x64 或 arm64 | 同上。 |
| 格式版本号 | 1 | 线路协议的版本,这样将来对格式的改动就不会被误认为是上面的某个字段。 |
它发往本网站的 POST /api/problem-report。你的 IP 地址仅用于把发送频率限制在合理范围内,并且从不写入磁盘——实际保存的记录是缺陷还是不喜欢、你的消息、你提供的联系地址(如有)、应用程序版本、平台、架构,以及我们的查询能根据连接给出时你所在的大致国家/地区,别无其他。它由项目维护者在管理仪表板上阅读,受与这里其他所有内容相同的密码保护,并且报告会一直保留,直到从该仪表板中删除,或直到你提出要求。已处理的报告——已在 FoxSDR 中修复,或以其他方式答复——可能会在那里归档而不是删除;归档的报告仍会被保存,包括上面列出的所有内容。如果你提供了联系地址并希望删除该报告,请写信到下面的地址,并引用足够多的原文以便找到它。
网站:你访问时会记录什么
无论你是否接受 Cookie,每次页面浏览和每次下载都会写入一条记录。这是第一方统计:数据保留在提供本网站的服务器上,不与广告网络共享,页面上也没有第三方脚本。
| 记录的内容 | 来源 | 是否需要同意 |
|---|---|---|
| 日期和时间、请求的页面、HTTP 方法和协议 | 请求本身 | 否 |
| 你的 IP 地址及其加盐哈希 | 连接 | 否 |
| 大致位置:国家/地区、省/州、城市、邮编区域、时区,以及该城市的坐标——不是你的坐标 | IP 地址,通过 ip-api.com 查询 | 否 |
| 你的网络:互联网服务提供商、组织、AS 号,以及该地址是否属于已知的 VPN、数据中心或移动网络 | 同一次查询 | 否 |
| 浏览器及版本、操作系统及版本、设备类型,以及该请求是否看起来来自机器人 | User-Agent 标头 | 否 |
哪个页面把你引到这里,以及链接上的任何推广活动标签(utm_source 等) | Referer 标头和 URL | 否 |
| 首选语言 | Accept-Language 标头 | 否 |
| 你下载了哪个文件、其版本、发送了多少字节以及传输是否完成 | 下载本身 | 否 |
| 屏幕和窗口尺寸、像素比、颜色深度 | 你的浏览器,由本页面的脚本报告 | 是 |
| CPU 核心数和大致设备内存 | 同一脚本 | 是 |
| 时区、语言列表、深色模式偏好、触摸支持、平台 | 同一脚本 | 是 |
| 连接类型、估计的下行速度和往返时间 | 同一脚本 | 是 |
| 页面可见时长、滚动距离、点击次数,以及你按下了哪些按钮 | 同一脚本 | 是 |
刻意不做的事
- 不做浏览器指纹识别:不探测 canvas、音频、字体或 WebGL,也不做任何在你拒绝后试图重新识别你的事。
- 没有第三方跟踪器、广告像素、社交小部件或统计服务。本页面上没有任何内容从其他域名加载。
- 不会尝试读取你的剪贴板、电池、摄像头、麦克风、已保存的密码或浏览历史——一个下载页面与这些毫无关系。
- 你的数据不会被出售、出租或与任何人共享。服务器唯一发出的与你有关的外部请求,就是上面所述的 IP 到位置查询。
你发布的界面设计
本网站可以保存你选择发布的 FoxSDR 界面设计(一个 .foxui 包)。在你按下 Publish 之前不会发送任何内容,发送目标是 POST /api/gui/publish。保存的就是包里的内容:设计本身、你输入的名称、版本和描述、你输入的作者名(如有)、发布时间,以及一个随机标识符。你的 IP 地址只用于把发布频率控制在合理范围内,绝不会写入磁盘。已发布的包不会出现在任何列表中;任何拥有其链接的人都可以下载。它会一直保存,直到在管理后台被删除,或直到你提出要求——请写信到下方地址并附上它的链接。
如果你报名成为公测测试员
公测表单和新闻订阅是本网站唯一向你索取任何信息的地方(发布界面设计除外,见上文)。提交表单会存储你的电子邮件地址,以及你选择提供的以下任何信息:姓名或呼号、你的平台、你打算使用的 SDR、你的备注,以及你自愿测试的功能列表。与之一起,我们还会保留上文所述的同样的访问上下文——大致位置、网络、浏览器和操作系统——因为同一份缺陷报告,放在不同的配置环境下读来会大不相同。
- 该地址只用于一件事:就公测构建和测试内容与你联系。没有新闻简报、没有营销,也绝不会转给任何其他人。
- 在你确认之前什么也不会发生。报名会发送一封带有六位数验证码的邮件,你把它输入页面,以确认该地址属于你。验证码在 30 分钟内有效,输错五次后即被拒绝。在输入之前,这条记录不起作用:你不在测试员名单上,不被计数,也不会再收到任何邮件。如果是别人输入了你的地址,忽略那封邮件即可,这条记录永远不会生效——没有什么需要退订,你也无需采取任何行动。那一封邮件是报名所能产生的唯一一封自动邮件。
- 如果你曾写信给我们,我们可能会邀请你。曾经写信给我们并留下地址的人——例如通过应用程序的功能请求框——可能会收到我们的一封私人邀请,其中有一个一次性链接,可打开本网站的“确认”按键。该邀请与未确认的报名一样作为待定记录保存:除非你按下“确认”,否则你不是测试员,也不被计数;如果你忽略它,我们不会再给你写信。待定记录不会自行过期;当我们将其从名单中清除,或你提出要求(发一封邮件到下面的地址即可)时,它会被删除。
- 在你确认之后,你会得到自己的专属管理链接;当有需要你所提供测试内容的构建发布时,我们会写信给你。那是一个人在给你写信,而不是邮件列表。如果你丢失了链接,我们可以为你重新签发一个:旧链接立即失效,新链接通过邮件发送给你,我们会保存签发的时间以及邮件是否已发出。
- 该邮件经由 Apple 传送。
foxsdr.com的邮件由 Apple 的 iCloud 邮件服务承载,因此你的地址和邮件在发送给你的途中会经过他们的服务器,并受其作为我们邮件服务提供商的条款约束。除此之外,不会向他们发送有关你的任何其他信息。 - 它与统计数据分开保存。报名信息存放在单独的文件中,只有运行服务器的账户才能读取;统计日志只记录发生了一次报名以及选择了多少项功能,从不记录是谁。如果地址进入统计日志,一项自动化测试会使构建失败。
- 使用已在名单上的地址再次报名,不会更改那条记录。更改需要在你自己的测试者页面上进行。取而代之的是,我们会向该地址发送一封邮件:如果已确认,内容是它的专属链接;如果尚未确认,则是一个新的验证码,并且每 15 分钟最多发送一次。
- 我们会保留发给你的邮件副本。本网站发给测试员的每一条消息——确认邮件,以及每条关于构建的消息——都会连同其文本一起保留,以便我们查看说过什么、是否送达。副本按你的内部 ID 而不是你的地址归档,其中的个人部分(确认验证码或链接,以及你自己的管理链接)在存储前会被去除,因此保留的邮件永远无法被用来冒充你行事。你退出时,这些副本会与你记录的其余部分一起删除。
- 你与我们之间的消息会被保存。测试员门户中的“消息”栏是你与 FoxSDR 开发者的对话:我们写给你的内容和你的回复,每条都附有写下的时间,如果你选择了,还附有它所涉及的你的报告。对话按你的内部编号保存,而不是按你的邮箱地址,只有你(凭你的专属链接)和我们能看到。我们还会记录我们的消息何时显示在你的屏幕上,以便知道消息已送达。页面打开时,它每隔几秒询问一次新消息,所以消息一写好就会出现,同时告知你距上次使用页面已过多久;在它持续询问期间及之后半分钟内,并且仅当你在最近五分钟内使用过页面时,服务器才知道你在页面上。这只保存在服务器内存中,从不写入记录。我们不会为每条消息发邮件:你不在时我们写了消息,你会收到一封简短的邮件,告诉你有消息在等你,邮件中有你的链接,但不含消息本身。在那条消息未读期间,最长 12 小时内不会再发这样的邮件,距上一封不足半小时也不会发;如果我们写消息时你在页面上,但十分钟后仍未看到该消息,邮件就会在那时发出。这封邮件的副本按上文所述保存;你写信时,不会发送任何邮件。对话会一直保存,直到你退出或要求我们删除,退出时会全部删除。
- 保留至公测计划结束,或直到你提出要求。发一封邮件到下面的地址,即可将你移除并删除记录——你无需说明理由。
- 此处的合法依据是你的同意,通过勾选该框给出;不勾选,表单就无法提交。
如果你订阅电子邮件新闻
新闻页面只要求一样东西:你的电子邮件地址。保留它是为了在 FoxSDR 有新版本时给你发邮件,偶尔也介绍正在开发的内容。它不作其他任何用途,也绝不会转给任何人。
- 在你确认之前什么也不会发生。订阅会发送一封带有六位数验证码的邮件,需要输入到页面中。在输入之前不会发送其他任何邮件,而且一周内未确认的地址会被删除——由服务器上每天运行的代码执行。如果是别人输入了你的地址,忽略那封邮件即可。
- 每封邮件都附有一个链接,按一下即可退出名单。退出会从服务器的文件中删除该地址,连同我们为它保留的已发邮件副本;不会保留与之相关的任何内容。
- 它是一份独立的名单。新闻订阅者不是公测测试员:地址保存在一个单独的文件中,只有运行服务器的账户才能读取,也不会作为测试员被计数或显示。如果你同时也是测试员,每条消息只会收到一次。
- 我们会保留发给你的邮件副本,按内部 ID 而不是你的地址归档,并去除确认验证码和退订链接,与测试员的做法完全相同。
- 该邮件经由 Apple 传送,如上文针对测试员所述。
- 统计日志只记录发生了一次订阅,从不记录是谁。
- 合法依据是你的同意,通过勾选该框给出;不勾选,表单就无法提交。
Cookie
| Cookie | 用途 | 有效期 |
|---|---|---|
fox_consent | 记住你是接受还是拒绝,这样只会问你一次 | 1 年(接受)/ 6 个月(拒绝) |
fox_vid | 一个随机标识符,用于把再次访问识别为同一个浏览器。仅在你接受时设置。 | 400 天 |
fox_sid | 把一次连续浏览归为一个会话。仅在你接受时设置。 | 闲置 30 分钟 |
fox_beta | 保存你的公测测试员链接,以便你回到自己的记录。仅在你报名成为测试员时设置,而且只是因为那正是你所要求的——它不做任何统计,因此不属于上面的统计选择。你将自己移除时会清除它。 | 400 天 |
foxsdr_lang | 记住你为本网站选择的语言,这样下一个页面也会使用该语言。仅在你自己选择语言时设置——通过语言选择器或带有 ?lang= 的链接——它只保存该语言的代码,例如 es。它不做任何统计,因此不属于上面的统计选择。 | 1 年 |
fox_news_joined | 不是 Cookie,而是你浏览器自身存储中的一个标记,从不发送给我们。下载之后,网站会询问你是否希望通过电子邮件接收新闻;一旦你从这个浏览器订阅并确认,它就不再询问。它只保存 1,并且仅在你订阅后才存在。 | 直到你清除本网站的数据 |
如果你拒绝,就不会设置任何可识别身份的 Cookie。此时访问按你的地址和浏览器的每日轮换哈希分组,它能为计数目的区分访客,但无法用来跨天或跨网站跟踪你。你可以清除本网站的 Cookie 并重新加载页面来改变主意。
你看到的是哪种语言
这些页面可以用英语以外的语言显示。你看到哪种语言,由服务器针对你请求的每个页面按以下顺序决定:你自己选择的语言(上面的 foxsdr_lang Cookie,或链接中的 ?lang=);否则是你的浏览器通过其 Accept-Language 标头表明的首选语言;否则是你的连接所在国家/地区的主要语言——位于本网站前端的网络 Cloudflare 会随请求传递一个两字母国家/地区代码(CF-IPCountry);否则为英语。做出这一选择不需要存储任何东西:标头和国家/地区代码只为这一次响应读取,不会为此保留。它们正是上表中已列为每次页面浏览都会记录的那两项,其中国家/地区代码在我们自己的地址查询没有结果时使用。译文由机器翻译生成,在本声明和各许可证上,具有约束力的是英文文本。
目的和依据
目的很有限:了解有多少人发现了这个项目、他们大致在哪里、用什么运行它,以及有多少人会继续下载它。这决定了这项工作是否继续,以及下一步做什么。
服务器端记录基于了解和保护本网站的正当利益而保存。浏览器报告的详细信息和可识别身份的 Cookie 基于你的同意而保存,这就是它们位于横幅之后的原因,也是在本网站上拒绝不会让你失去任何东西的原因。
保留多久,以及谁能看到
记录保留 24 个月,然后删除。它们存放在服务器上的一个文件中,位于一个只有项目维护者才能打开的受密码保护的仪表板之后。除了上文已述的 IP 查询之外,没有其他接收方,也没有向第三国的传输。
有两类数据保留期更短。崩溃和卡死报告在其描述的故障最后一次出现 90 天后删除,Cloudflare 处理的使用情况报告在三个月后删除。每一个期限都由服务器上每天运行的代码强制执行,而不是靠人记得去做。
你的权利
如果你在英国或欧盟,你可以要求获取我们所持有的关于你的信息副本,要求更正或删除这些信息,或者反对收集这些信息——包括不依赖同意的服务器端记录。查找你的记录的实际标识符是你访问时的 IP 地址,因此请提供该地址以及你大致的访问时间。
对于应用程序,控制项就在软件本身中,共有三个:
- 系统 → 使用情况报告会停止使用情况报告和五分钟一次的心跳,并删除安装标识符。以后重新开启,你会得到一个无法与旧标识符关联的新标识符。
- 系统 → 诊断会停止写入或发送崩溃和卡死报告。
- 系统 → 更新会停止更新检查。
这些报告不包含任何可以与你关联的内容,因此没有什么可以申请访问的;如果你希望从已发送的报告中删除某个安装标识符,请写信到下面的地址并注明该标识符,它将被删除。
儿童。FoxSDR 是面向无线电爱好者的技术仪器。它并非面向儿童,不从任何人那里收集个人信息,因此也不会从儿童那里收集。
请写信至 [email protected]。如果你认为此事处理不当,也可以向英国信息专员办公室(Information Commissioner's Office,ico.org.uk)投诉。
最后更新于 2026 年 9 月 24 日,依据 FoxSDR 0.99.39——即本网站当前提供的构建,上述每一项陈述都已对照其源代码核实。FoxSDR 由 Steven Fox 发布;如对本声明有任何疑问,或希望从已发送的报告中删除某个安装标识符,请写信至上述地址。如果本声明与软件的实际行为不再相符,那就是软件出了错——网站的数据收集在 store.go 和 app.js 中实现,两者都可在网站自己的源代码中查阅;应用程序自己的列表作为 PRIVACY.md 随应用程序一起提供,并有一项测试使有效载荷与之保持一致。