FoxSDR 0.99.80 · 公测版
机器翻译

这是机器翻译;具有约束力的是英文版本。 阅读英文版本

← 返回 FoxSDR

隐私和 Cookie

本声明涵盖两件不同的事:你安装的 FoxSDR 应用程序,以及本网站。二者出于不同原因收集不同的数据,下面分别说明——先说应用程序,因为那是在你自己机器上运行的部分。本声明力求完整而非简短:二者存储的每一个字段都已列出,包括大多数声明会略去的那些。

应用程序:它发送什么

没有账户、没有许可证密钥、无需激活,而且FoxSDR 从不报告任何有关你收听内容的信息。它自行发出的网络请求恰好有四种:更新检查;匿名使用情况报告,以及应用程序打开期间一个很小的“仍在运行”心跳;发生故障后的崩溃或卡死报告;以及——仅当你打开插件商店或在其中按“立即检查”时——对插件目录的请求。下面逐字段说明每一种,每一种都可以关闭。控制它们的开关有三个:系统 → 更新、系统 → 使用情况报告和系统 → 诊断。没有任何功能依赖于其中任何一个处于开启状态,关闭它们也不会有任何提示来烦你。

哪些内容留在你的机器上

你的录音(包括音频和原始 I/Q)、SSTV 和气象卫星解码器生成的图像、解码器解出的一切内容、你的书签、频段规划、设置、接收机位置以及已安装的插件,都是你自己磁盘上的文件。没有任何东西会上传它们,你调谐的任何频率都不会离开你的机器。

更新检查

每次启动时,应用程序会询问本网站是否有更新的版本。整个请求就是 GET /api/update?v= 后跟你正在运行的版本——没有标识符、没有安装 ID、没有 Cookie,也没有任何可以与之后的请求关联起来的东西。本服务器不会为它写入任何统计记录:只记录页面浏览和文件下载,而更新端点两者都不是。在系统 → 更新中关闭它,应用程序就再也不会联系该服务。

应答中还可以附带我们给旧版本用户的一条简短消息,例如告知某个版本修复了值得更新的问题,并显示在与版本说明相同的更新横幅中。为此不会额外发送或记录任何内容:它包含在上述同一请求中,按同一时间表,由同一开关控制。

除非你按下按钮,否则不会下载或安装任何东西。如果你按下了,安装程序会通过 HTTPS 从本网站获取,并在文件被赋予任何程序都能运行的名称之前,对照服务器公布的摘要检查其 SHA-256——而这次获取是从本网站进行的普通下载,因此会像其他下载一样被记录,包括本声明网站部分所述的 IP 地址、大致位置、浏览器和操作系统。

从 Microsoft Store 安装的副本会改为询问 Microsoft Store,绝不会询问本站(自 FoxSDR 0.99.53 起)。当勾选了系统 → 更新 → 启动时向 Microsoft Store 询问更新时,FoxSDR 每次启动会向 Windows 自带的 Store 服务询问是否有适用于此副本的更新包。该请求不会发送任何 FoxSDR 的信息,既无版本也无标识符:Windows 通过应用已有的包标识向 Microsoft 识别该应用,与 Store 自身的后台更新相同。应答只保留在应用内。除非你点击从 Microsoft Store 安装并确认 Windows 显示的对话框,否则不会下载或安装任何内容;之后的下载和安装由 Microsoft 负责,适用 Microsoft 的隐私声明。取消勾选该选项后,将不再询问 Store。

使用情况报告

从 0.53.0 版起,系统 → 使用情况报告中提供匿名使用情况报告。它默认开启,你可以将其关闭——取消勾选该框,报告会立即停止。每次启动发送一份报告,描述刚刚结束的会话,以下就是它的全部内容:

发送的内容示例原因
安装标识符32 个随机十六进制字符区分 100 个用户和一个用户启动了 100 次。首次运行时在你的机器上随机生成,在你关闭报告时删除,并且从不根据你的硬件、网络或姓名生成。
应用程序版本0.99.42用户是否会更新。Android Alpha 版会将自己的构建报告为 0.98.1-android.4——在其所基于的发布版本号后加上 -android.N 后缀,这样它的报告就绝不会与 Windows 安装程序的报告混淆。
操作系统Windows 10.0.22631、Linux 6.8.0 或 Android 14实际使用了哪些平台。操作系统及其构建号、内核或发行版本号,从不包括你机器的名称或你的用户账户。Linux 构建(0.99.42)和 Android Alpha 版(0.98.1-android.4)在同一个开关下发送相同的字段。
架构x64 或 arm64同上。
安装方式installer以下之一:store(Microsoft Store)、installer(Windows 安装程序)、appimage 或 tarball(Linux 和 Raspberry Pi 下载),或者 android。从运行中的程序中读取,安装时从不记录。无法区分 foxsdr.com 和 GitHub,因为二者提供的是相同的文件。
首次运行2026-09-29创建您的安装标识符的日期(UTC)——从不是时间。关闭报告后会与标识符一起删除。用于区分新用户和长期用户。标识符早于 FoxSDR 0.99.47 的副本此项为空。
首个版本0.99.47创建该标识符的版本——即您最初使用的下载版本。与标识符一起删除,就像首次运行一样。
启动次数12软件是否被使用了不止一次。
崩溃次数1它多久出一次故障。
按原因分类的非正常退出,自 FoxSDR 0.99.69 起1, 0, 0, 0上面的崩溃计数统计了所有未正常关闭而结束的会话:包括崩溃,也包括通过任务管理器结束窗口或断电。以下四个数字说明具体原因:died(FoxSDR 自身故障:崩溃,或窗口停止绘制后被结束)、killed(在正常工作时被外部结束,如任务管理器、taskkill、安装程序、关闭控制台窗口)、被系统结束(注销或关机)和未知(没有任何记录:诊断已关闭,或断电)。每次非正常退出恰好属于其中一类。它们与崩溃计数一样只是单纯的数字,从不重置:不会添加报告文本、退出代码、模块名称或时间。FoxSDR 在你的电脑上、于下次启动时,根据诊断已写入本地的报告进行判断;若诊断已关闭,则不读取任何内容,所有非正常退出都计为未知。上一次会话开始的时间保存在你的设置文件中,以便只查看此后写入的报告;该时间绝不会被发送。
显示停滞(自 FoxSDR 0.99.62 起)0窗口卡死的次数,原因是显示驱动在等待,而不是 FoxSDR——显示器被关闭、图形驱动被重置、远程桌面会话重新连接。它只是一个单纯的数字,不含堆栈、驱动名称和时刻:此类卡死的报告只保留在你的电脑上,绝不会发送。只有在使用情况报告和诊断都开启时才会计数。为了让你从任务栏结束的卡死也能被计入,这个数字会连同你的安装标识符一起,保存在设置文件旁一个名为 telemetry-stalls 的小文件中,直到服务器接受了带有该数字的报告为止;关闭使用情况报告会删除该文件。
失败计数,自 FoxSDR 0.99.64 起radio_fail.rtlsdr.busy=2某件事悄悄失败了多少次,按固定的种类清单计数:打不开的 SDR(驱动程序和八种原因之一)、没有声音输出、失败的更新或插件安装、加载时被拒绝的插件、无法开始的录制——以及实际成功打开的 SDR 和声音输出有多少,好让失败有可比较的对象。只有清单中的词语和数字,绝不包含设备名称、序列号、路径、频率或任何消息文本。只有在使用情况报告和诊断都开启时才会计数,大多数人的这个字段是空的。
慢帧与恢复,自 FoxSDR 0.99.65 起slow.rail.250ms=3,recovered.audio=1同一字段还包含:窗口绘制某一帧过慢的次数,以及发生在绘制的哪一部分(固定清单中的十八个部分之一)、属于三种时长中的哪一种(四分之一秒、一秒或五秒);还有 FoxSDR 遇到故障并自行继续运行的次数,发生在固定清单中的十三个位置之一:声音输出重新启动、SDR 在驱动程序故障后重新打开、设置保存失败等等。只有这些清单中的词语和数字,绝不包含设备名称、序列号、路径、频率或任何消息文本。只有在使用情况报告和诊断都开启时才会计数,大多数人的这个字段是空的。
会话时长3600 秒会话是几分钟还是几小时。
SDR 型号uhd b200优先支持哪些 SDR。发送前会去除序列号。
使用过的解调器及使用时长WFM: 3000s哪些模式值得进一步投入。
打开过的面板map, decoded哪些功能被使用。
已安装的插件ADS-B 1.0.0哪些解码器值得进一步投入。你从自己添加的插件站点安装的插件(自 FoxSDR 0.99.74 起)与其他已装插件一样:它的名称和版本会出现在这里,站点的地址不会。

这就是完整的列表。它作为 PRIVACY.md 随应用程序一起提供,一项自动化测试会逐字段检查有效载荷,因此不可能在不让该测试失败、不同时更新两份文档的情况下添加新字段。关闭报告会删除安装标识符,因此如果你以后重新开启,会得到一个无法与旧标识符关联的新标识符。

报告在启动时发送,描述已经结束的会话,从不在退出时发送——退出时的网络调用可能让一个用户正试图关闭的应用程序卡住,而在退出时写入的报告,恰恰会因最值得统计的那种事件而丢失。回复中的任何内容都不会被读取,也不会据以执行任何操作。

失败计数详解(自 FoxSDR 0.99.64 起)。该字段是由 kind=count 对组成的一小段文本,例如 radio_fail.rtlsdr.busy=2——一个因为另一个程序正在占用而两次打不开的 RTL-SDR。FoxSDR 用一张固定的表来构造每一种类,表中没有的内容一概不发送,接收的服务器也会丢弃不在同一张表中的所有内容。当原因是从驱动程序所说的内容中读取出来时,FoxSDR 从固定清单中挑出一个词,并丢弃那句话。为了让随后崩溃的会话中的失败也能被报告,这些计数会连同你的安装标识符一起,保存在设置文件旁一个名为 telemetry-health 的小文件中,直到服务器接受了带有这些计数的报告为止;关闭使用情况报告会删除该文件。

慢帧与恢复详解(自 FoxSDR 0.99.65 起)。它们位于同一字段中,采用同样的 kind=count 形式。slow.rail.250ms=3 表示窗口有三帧,每帧耗时四分之一秒或更长,发生在绘制中属于菜单列的那一部分。该部分是十八个词之一,events, frame-start, pre-draw, plugin-panels, toolbar, rail, spectrum, patch, status, dialogs, polls, saves, render, present, recorder, plugins-reload, startup, other;而慢到什么程度是三种之一:250ms 表示四分之一秒到不足一秒,1s 表示一秒到不足五秒,5s 表示五秒或更长。你回应 Windows 提示、拖动窗口或调整窗口大小所花的时间会被扣除,绝不计入。recovered.audio=1 表示 FoxSDR 遇到一次故障并自行继续运行。该词是十三个位置之一,audio, reopen, srcthread, vendorcall, ringdrop, dspexc, cfgsave, enumchild, pluginapi, webroute, patchload, sdrenum, sdrlost,顺序如下:声音输出停止,监视器将其重新启动;SoapySDR 的 SDR 驱动程序出现故障,FoxSDR 自行重新打开了 SDR;接收器停止时,SDR 驱动程序始终没有从读取中返回,FoxSDR 放弃了该线程;对 SoapySDR 厂商模块的调用没有及时返回,被放弃;SDR 送出采样的速度快于被取走的速度,部分采样被丢弃;信号处理线程抛出了一个已被捕获的错误,接收器停止;无法写入设置文件;通过 SoapySDR 列出 SDR 的辅助程序终止了,并被隔离;插件对 FoxSDR 的一次调用抛出错误,并以默认值作答;网页界面的处理程序抛出错误,服务器以失败作答;已保存的配线加载时缺少了一些连接;SDRplay 服务没有回应一次扫描,该扫描被放弃;SDRplay 会话丢失,SDRplay 在本次会话余下的时间里被关闭。FoxSDR 用一张固定的表来构造其中每一项,表中没有的内容一概不发送,接收的服务器也会丢弃不在同一张表中的所有内容,因此绝不会出现设备名称、序列号、路径、频率或任何消息文本;一份报告最多携带最严重的八种慢帧和八种恢复。它们与失败计数受同样的两个开关控制,只有在使用情况报告和诊断都开启时才会计数,它们保存在设置文件旁同一个名为 telemetry-health 的小文件中,直到服务器接受了带有它们的报告为止,并且关闭使用情况报告会删除该文件。

“仍在运行”心跳

在应用程序启动时到达的报告,只能说明谁启动了它,永远无法说明谁仍然开着它。因此,在 FoxSDR 运行期间——并且仅当使用情况报告开启时——它还会每隔五分钟发送一条非常小的消息,其中包含三个字段,别无其他:

发送的内容示例原因
安装标识符与上面相同的 32 个十六进制字符这样,同一副本发出的十二次心跳计为一个正在运行的副本,而不是十二个。
应用程序版本0.99.42这样,“当前正在运行”的数量可以按版本细分。
心跳标记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把许多人报告的同一个故障归为一个条目,这样一个缺陷的一百份报告就是一件要修复的事,而不是一百件。
应用程序版本、提交和构建 ID0.61.0, 28fa1c2故障发生在哪个构建中,以及与哪些符号相匹配。
出错模块和偏移量cascade.exe, 0x1a2b程序在哪里出了错。
操作系统和架构Windows 11、Linux 或 Android 14,x64 或 arm64故障常常只出现在某一个平台上。Linux 或 Android 报告携带相同的字段;堆栈帧中给出的是出错库的 GNU 构建 ID 而不是 PDB ID,因为这两个平台都不使用 MSVC 构建。
故障属于哪一类access violation, 0xC0000005报告自身的原因行和 Windows 异常代码。尤其是,正是它表明一个故障是被吸收的——应用程序挺过来了——而不是一次崩溃;没有它,二者看起来完全相同。只有一个代码和一句固定的话,从不包含内容。
卡死发生在窗口绘制的哪一部分,自 FoxSDR 0.99.64 起rail仅限卡死报告:停止时窗口绘制的哪一部分正在进行,用固定的十九个词的清单中的一个词表示:events, frame-start, pre-draw, plugin-panels, toolbar, rail, spectrum, patch, status, dialogs, polls, saves, render, present, recorder, plugins-reload, startup, user-wait, other。它只指明程序的某个部分,绝不是插件、文件、SDR 或频率。同一个词也会出现在报告的原因中,作为固定句子 freeze: the frame was in rail 发送;不在清单中的词会被丢弃,不会发送。以前的卡死报告完全不发送原因。
已加载的插件及其版本ADS-B 1.1.0“只在加载了 ADS-B 插件时崩溃”是对故障的描述;“有时会崩溃”则不是。
线程堆栈每帧 cascade.exe+0x1a2b堆栈就是故障本身。它只包含模块名称、构建 ID 和数字偏移量——没有源码路径、没有变量、没有内存内容。自 FoxSDR 0.99.63 起,卡死报告中位于 FoxSDR 启动后才加载的模块(系统重新加载的图形驱动、厂商的 DLL、外壳扩展)内的帧,会以该文件的名称(绝不是文件夹路径)和偏移量发送,此前则是以单纯的地址发送。文件名可能显示你的电脑上安装了什么软件;这些报告对于启动时加载的驱动,本来就包含同类的名称。
会话日志的末尾opened rtlsdr应用程序最后记录的几行日志,通常就是它出错时正在做的事。这是应用程序自己的日志:它记录状态变化——信号源已打开、采样率已设置、插件已启动——从不记录信号内容,也从不记录你打开的文件的名称或路径。它还包含 SDR 驱动输出的内容以及其库打印到标准错误流的内容。这份日志的任何一行在离开你的电脑之前,无论是应用程序自己的行还是驱动的行,都会先经过清理:序列号和 USB 设备标识符中因设备而异的部分会被替换为 <stripped>,文件路径中的账户名会被替换为 <user>,单引号内的任何内容(例如你给配线节点和扬声器起的名字)会被替换为 '<name>';自 FoxSDR 0.99.59 起,每个网络地址以及每个计算机名或主机名都会被替换为 <host>,其后的端口号保留,串行端口的编号则会被替换为 #(COM#、/dev/ttyUSB#);在任何提到赫兹、频率、调谐、中心、范围、偏移、载波、预设或发射的行中,每个数字都会被替换为 #,除非它被标明为采样率、时间、电平、大小或计数,属于版本号、标识符或错误代码,或是 R820T 这类名称的一部分;USB 驱动列出已连接到你电脑的设备的那些行则会被省略,并以一行说明有多少台设备。自 0.99.59 起,应用程序在日志中完全不再写入声卡的名称,因为这个名称往往是由用户自己取的。自 0.99.61 起,应用程序还会在日志中记录声音输出何时打开或被拒绝:音频驱动程序的型号、声道布局和采样率,但绝不记录声音设备的名称。
上下文注释mode: WFM, sampleRate: 2400000应用程序附加的几条键/值注释:模式、信号源(信号发生器、I/Q 文件或真实 SDR)、采样率、是否打开了设备、去除了序列号的 SDR 型号、应用程序已运行了多少秒,以及出错的线程当时运行的是 FoxSDR 自己的代码还是 SDR 驱动的代码。sampleRate 是采样率,不是调谐频率。
频率校正,自 FoxSDR 0.99.56 起ppm: +1.5 by retuningSDR 的晶振校正是否开启、其以百万分之一(ppm)表示的数值,以及应用方式(in the radio 或 by retuning),或 off。它描述的是 SDR 的晶振,而不是某个频率:并不能说明你在收听什么。
进程中其他软件的 DLL,自 FoxSDR 0.99.69 起foreignModules: NahimicOSD.dll, RTSSHooks64.dll被加载到 FoxSDR 中的其他程序组件的文件名(绝不包含文件夹、版本或文件的任何其他信息):即所有已加载的模块中,既不属于 Windows 本身、也不属于 FoxSDR(其程序文件夹、插件、C++ 运行库),也不是 FoxSDR 有意加载的 SDR 厂商驱动文件的那些模块。这会披露其他软件 DLL 的名称,例如音频驱动的屏幕叠加层、帧率计数器、杀毒软件或输入工具的钩子;而文件名可能显示你的电脑上安装了哪些软件,因此在此说明。Windows 文件夹中的文件已被排除,使列表简短且有意义。之所以收集它,是因为 FoxSDR 在图形驱动交接过程中结束的报告里,会有将自身注入每个进程的程序挂钩,导致无法判断进程中还有什么其他内容。相同的名称也会写入应用程序日志(启动时写入一次 modules: 2 foreign - ...,之后加载时写入 module arrived: ...),因此这些行可能出现在上方会话日志的末尾。报告未说明时该值为空,此处最多保留 520 个字符。
The window’s start-up and the graphics adapter, from FoxSDR 0.99.78window: GL vendor NVIDIA Corporation; renderer NVIDIA GeForce RTX 4090/PCIe/SSE2; version 4.6.0 NVIDIA 610.88Lines the application writes to its log while its window is being created, each beginning window:, which therefore ride in the tail of the session log above: which window systems this build of the window library supports; on Linux, whether DISPLAY and WAYLAND_DISPLAY are set (set or not set — never their values, which can name a computer or a session), the session type when it is one of a fixed list of words, and which window system was chosen; the window library’s own error messages, with the display’s name left out; and the graphics driver’s own vendor, renderer and version strings, which name the make and model of your graphics adapter and its driver — a graphics fault cannot be told apart without them, and they say nothing about you. On Linux, a report of a process that ended before its window appeared now also says how it ended: an exit status, or a signal number whose name comes from a list of twelve (exit code 3 (the process ended itself), killed by signal 11 (SIGSEGV)), written down by FoxSDR itself as it ends, as a number behind a fixed tag; unknown when nothing was written, which is what an ending by SIGKILL leaves.
安装标识符32 个随机十六进制字符,或为空用于限制发送频率,随后即被丢弃:安装标识符不会被存储。陷入崩溃循环的机器绝不能淹没服务器,而区分一台机器和一百台机器是读取它的唯一目的。它从不写入这里的磁盘。如果使用情况报告已关闭,则发送空值——此时不存在标识符,崩溃报告也从不生成标识符。

已在 FoxSDR 0.99.33 中修正。在 0.99.33 之前,上述清除处理只应用于 SDR 驱动的日志行,而不适用于应用程序自身的日志行,因此应用程序自身的少数日志行可能进入崩溃或卡死报告,其中带有你请求的或正在发射的频率、patch 中 SDR 的标签(可能包含其序列号)、你为 patch 部件起的名称、patch 页面上解码器输出的第一行文本,以及 USB 驱动打印的 USB 设备列表(包括其序列号)。这与本声明相矛盾。自 0.99.33 起,每一行在离开你的电脑之前都会被清除,而且这些日志行一开始就不再包含上述值。

已在 FoxSDR 0.99.59 中更正。本声明一直说崩溃报告不包含机器名称、应用程序从不发送你的 IP 地址,但在 0.99.59 之前,清理并不查找网络地址或主机名。因此,少数日志行可能会进入崩溃或卡死报告,或缺陷报告的诊断日志,其中带有你为 ADALM-Pluto 之类的网络 SDR 输入的地址或主机名,或网络 SDR 驱动记录的某个地址或网址;这些行还可能带有串行端口的编号,以及在少数错误行中带有声卡的名称。这与本声明相矛盾。自 0.99.59 起,地址和主机名会按上文所述被替换,串行端口号会被遮蔽,ADALM-Pluto 自身的日志行不再输出其地址,也没有任何日志行会写出声卡的名称。

崩溃报告不包含频率、解码内容、文件路径、用户名、机器名称、网络地址和位置。报告保存在本网站自己的服务器上,位于与其他所有内容相同的受密码保护的仪表板之后,并且在该故障最后一次出现后保留 90 天,然后删除——与使用情况报告的保留期同为三个月。任何一个故障的第一份报告会完整保留,此外该故障延续到的每个构建再各保留一份,最多三份;同一故障的其他所有报告只计数而不存储。一项自动化测试双向核对该端点接受的内容和写入磁盘的内容与上表是否一致,因此不修改此表,就无法向任何一方添加字段。

在任何设置下都绝不发送完整内存转储。内存转储是程序内存的副本,可能包含文件名、窗口标题和接收到的信号数据。它默认关闭;如果你在“系统 → 诊断”中开启它,会在文本报告旁边写入一个 .dmp,仅保存在本地,而上传程序只打开名为 crash-*.txt 和 hang-*.txt 的文件,别无其他。

哨兵报告,自 FoxSDR 0.99.64 起。有些结束方式是 FoxSDR 内部无法报告的:跳过所有处理程序的崩溃、栈溢出、卡死得连卡死监视器也被卡住的窗口。因此,在诊断开启的交互式会话中,FoxSDR 会启动自己程序的第二个副本,不带窗口,只等待第一个结束——这就是哨兵。它能读取 FoxSDR 是怎么结束的(退出代码,以及何时开始和停止)、FoxSDR 不断更新的一小页数字(处于哪个阶段、已绘制多少帧以及最后一次绘制是什么时候、窗口绘制的哪一部分正在进行、菜单是否打开或窗口是否正在被拖动),以及会话日志的末尾,和其他报告一样经过清理。它不读取 FoxSDR 的任何内存,也不生成转储,而且这页数字没有存放文本的空间,所以不可能包含名称、路径、频率或地址。FoxSDR 结束时,哨兵会在同一个文件夹中以同样的格式写一份报告——如果 FoxSDR 正常结束或已自行写过一份,则不写——报告的原因只由固定的词语和整秒数组成,与接收机有关的行则被替换为一句固定的话,说明它无法读取这些内容。它自己不发送任何东西:它的报告在下次启动时发出,与其他报告使用同一个开关、同样的限制,并且仅在 FoxSDR 崩溃、窗口已停止绘制或在第一帧之前就结束时才发送。来自外部的结束(任务管理器或脚本)以及因 Windows 关闭你的会话而结束,都会留在你的电脑上,绝不会发送。诊断关闭时,哨兵不会启动。

发送频率。每台机器每天最多发送五份报告,同一故障无论发生多少次每天只发送一次——这两项限制都保存在你自己的设置文件中,因此陷入崩溃循环的机器会自行停止发送,而无需被告知;发送失败的报告会在之后的启动中最多重试三次,然后不再处理。要把报告中的偏移量还原为函数名,需要该确切构建的调试数据库,它只保存在我们自己的机器上,从不上传到任何地方:解析在本地进行,而不是在服务器上。

应用程序从不发送的内容

  • 你调谐的频率。一个人收听什么,是本软件所知道的最敏感的信息,它从不被收集。在英国,截收你无权接收的消息或泄露其内容,属于违反 2006 年《无线电报法》(Wireless Telegraphy Act)第 48 条的犯罪行为。
  • 你打开的文件的名称或路径。录音的文件名是你自己的数据——它可能指明某项无线电业务、某个地点或某个频率。当 I/Q 文件无法重新打开时,日志只记录它未能重新打开;名称留在屏幕上,而你本来就知道它。
  • 任何解码内容——寻呼消息、飞机、船舶、图像、卫星通信。
  • 你的位置,或你接收到的任何东西的位置——包括你设置的接收机位置,它从不在任何报告中发送。见下文。
  • 你的 IP 地址,或由其推断出的任何位置。请求到达服务器时必然带有一个来源地址,因为互联网就是这样工作的;使用情况端点不读取任何连接信息,也不写入任何请求日志。自 FoxSDR 0.99.59 起,报告所含日志行中的网络地址或主机名也会被替换为 <host>。
  • 硬件序列号。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,这种情况下完全不会发出网络请求。

你添加的插件站点

从 FoxSDR 0.99.74 起,你可以添加其他人的插件目录,称为插件站点,你每添加一个,应用程序就多联系一个地址。只有你才能添加:在插件商店的顶部栏按站点,粘贴一个地址,并勾选那个写明 FoxSDR 未审查该站点的复选框。FoxSDR 自己不会添加任何东西,也不会主动联系任何地方。站点的读取时机与公开目录相同——在一次会话中第一次打开商店时,以及每次你按立即检查时——并且只给它几秒钟来回应。请求带有你给出的地址,除此之外不含 FoxSDR 的任何内容:没有标识符,没有 Cookie,客户端名称(cascade-plugin-repo/1.0)在每份副本上都相同。因此,像任何网络服务器一样,该站点会看到你的 IP 地址。

站点中插件的文件和图片只会从与其目录相同的主机获取,并且只在你对其中某个插件按获取或更新,或打开其页面时才获取。每个站点的目录原样保存在你自己磁盘上的插件文件夹中,启动时重新读取,在你对该站点按移除时删除;地址本身保存在你的设置文件中。插件目录和插件安装的失败计数(见上文关于使用情况报告的部分)属于公开目录:无法访问的站点,或其某个安装失败的插件,不计入。

仅在部分国家/地区提供的插件

部分插件只提供给来自特定国家/地区的连接。应用程序获取插件目录时,还会向本网站请求一份简短的地区列表,该列表中的插件从本网站下载,而不是从 GitHub 下载。为决定如何回应,本网站会读取 Cloudflare 随请求一并传递的两个字母的国家/地区代码(CF-IPCountry),该代码由 Cloudflare 根据请求来源地址判断得出。国家/地区代码和地址仅用于这一次回应,不会被保存;不会发送任何可识别您身份的标识符,这些请求也不会记录在本网站的统计数据中。无法判断国家/地区的连接,或经由 Tor 到达的连接,会收到一份空列表。使用 VPN 会改变本网站看到的国家/地区。如果您已将商店指向其他目录,则不会请求地区列表。

可以发射的插件

从 FoxSDR 0.99.74 起,插件可以请求通过你的发射机发送音频;插件商店和“已装模块”窗口随后会将其显示为“可通过 FoxSDR 发射”。只有当你在它的页面上按了授予发射权并且将“发射”页面武装 5、15 或 60 分钟时,它才能触发发射机。该授权按插件的文件名保存在你自己的设置文件中,绝不会发送到任何地方;武装时间窗口则完全不保存。你机器上的诊断日志会记录触发过程——tx: armed 15 min、tx: plugin <name> keyed、tx: plugin <name> unkeyed (<why>) 和 tx: disarmed (<why>)——内容为插件声明的名称、固定列表中的一个原因和分钟数,绝不记录频率,并且在生成报告或诊断包时,这些行会像其他所有日志行一样被清除敏感信息。FoxSDR 自身的报告没有任何字段用于这些内容。

卫星轨道根数

卫星插件在加载期间每十二小时从其 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.42请求来自哪个构建。
操作系统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.42报告来自哪个构建,以免追查一个已经修复的缺陷。
操作系统windows、linux 或 android由哪个平台发送。
架构x64 或 arm64同上。
格式版本号1线路协议的版本,这样将来对格式的改动就不会被误认为是上面的某个字段。
诊断日志(自 FoxSDR 0.99.43 起)0.99.43 windows x64, Ettus B200 — recent log lines, serials/frequencies/paths scrubbed报告缺陷时默认勾选,报告不喜欢时默认不勾选——按发送之前你都可以更改。它包含应用程序版本、你的操作系统、当时使用的是哪台电台、你的设置的简短摘要,以及经过与崩溃报告日志末尾相同的清理过滤的应用程序自身日志中最近的几行:序列号和 USB ID 会被替换,任何与频率相关的数字都会被替换,单引号内的任何内容都会被替换,网络地址和主机名会被替换,串行端口号会被遮蔽(自 FoxSDR 0.99.59 起),文件路径中的账户名会被移除。本服务器会再次执行最后一项检查,以防有遗漏。它与报告的其余部分一起按照上述相同的条件保存和删除。自 FoxSDR 0.99.61 起,设置摘要中还会说明声音输出是否已打开以及通过哪种音频驱动程序、音量、声音是否被静音以及由谁静音(你、解码器插件或发射键;插件只会被描述,绝不会被点名),以及静噪的电平、是否打开和它正在判断的信号电平;这是一个电平,而不是频率。其中绝不会包含你的声音设备的名称或你所调谐的频率。自 FoxSDR 0.99.62 起,它还会包含另外三项内容:上一次会话日志的最后几行(最多 80 行),或一句说明没有可读内容的话;你电脑上最新的十份崩溃或卡死报告,每份一行,说明它是崩溃、卡死还是显示停滞、是多久之前写入的、写入它的版本、该次会话已运行了多久、窗口停滞了多久或崩溃的原因和代码、用于分组的故障签名,以及发送的结果,且不含取自这些报告的堆栈、日志行、模块列表、文件名或路径;以及一行说明配线页面正在运行多少台 SDR 以及每台的驱动种类,绝不包含 SDR 的名称、序列号或地址,也不包含录音的名称或频率。上一次会话的日志和报告列表中的每一行,都会经过同一道清理过滤。关闭“诊断”后,诊断日志中既没有上一次会话的日志,也没有报告列表,而且这些内容都不属于 FoxSDR 自行发送的崩溃或卡死报告的一部分。
你粘贴的报告,自 FoxSDR 0.99.69 起sentinel:outside, written by 0.99.66, and the report仅在适用时。如果你输入或粘贴的消息包含 FoxSDR 崩溃、卡死或哨兵报告(即报告文件夹中报告文件所含的文本,人们有时会手动粘贴),应用程序会识别出来,并在你点击发送之前在页面上告知你(“已识别报告并附加为 …”),然后将其与消息一并再次发送,并附带三项内容:报告的类型(崩溃、卡死、显示停滞,或哨兵记录的五种结束情形之一)、写入该报告的构建(报告自身上下文块中的版本行,可能并非你当前运行的版本),以及报告本身。这并未发送任何你尚未发送的内容:它们就是你消息中的文字,只是按类型归档,以便管理页面能为其命名。只查看输入框中的文本,不读取任何文件。它在此处会像诊断日志一样被清除(去除文件路径中的账户名和任何电子邮件地址),限制为 64 KiB,并与报告的其余部分一起保存,适用与上述所有内容相同的条款。

自 FoxSDR 0.99.69 起,诊断日志还会多一行,仅以文件名(绝不包含文件夹或版本)列出被加载到 FoxSDR 中的其他程序组件,例如其他程序放入的叠加层或钩子;它与上方崩溃报告表中描述的列表相同,也是 FoxSDR 自行发送的崩溃或卡死报告的一部分。

它会发送到本网站的 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 中输入了测试者代码

您的测试者页面(上方)会提供一个私人管理链接,并从中获得一个可以直接输入 FoxSDR 的【系统 → 测试者代码】中的 测试者代码。这与上文所述的匿名 使用情况报告 不同:使用情况报告故意无法追溯到您,而使用测试者代码报告的会话则 故意与您的测试者条目关联 —— 这正是其目的:让我们知道真正进行测试的人实际尝试了哪些功能和插件。除非您输入代码,否则它 默认关闭,该字段默认为空。

测试者页面上的关联 FoxSDR会为 FoxSDR 生成一个单独的应用代码,这样你的专属链接就永远不必输入到应用程序里。应用代码只能做两件事:发送下面所述的会话报告,以及收发你“消息”栏里的消息。它看不到你的地址,不能修改你的登记,也不能把你移除。它与你的测试者登记一起保存;按新链接会使它失效,之后需要重新关联 FoxSDR;退出测试计划则会把它连同你登记的其余内容一起删除。

只要输入了代码,FoxSDR 大约每个会话发送一次以下内容,仅此而已:

发送的内容示例原因
你的测试员代码“关联 FoxSDR”生成的应用代码,或你测试者页面上的令牌说明此会话属于哪个测试员条目。它会被解析为你的内部测试员 ID,且其本身绝不会被存储,本站对崩溃报告的安装标识符适用同样的规则。
应用程序版本0.99.42你正在测试哪个构建。
平台和架构windows, x64同上。
会话开始的时间2026-09-25T14:32:00Z用于说明某个功能或插件实际使用的时间有多近,以及报告会保留多久 — 而不是报告到达此服务器的时间,如果 FoxSDR 要等到下次启动才发送,时间可能会更晚。如果声称是未来几分钟以上,或早于下面的一年保留期限,则会直接被拒绝。
会话时长42 分钟会话持续了多长时间,最长一天。
使用的功能spectrum, adsb在此次会话中,你实际使用了测试员页面磁贴板上的哪些区域,仅限本站已公开的 ID;其他任何内容都会被直接拒绝。
使用的插件、其版本及使用时长adsb-decoder 1.8.0, 30 min插件目录中的哪些条目和版本被实际使用。从你添加的插件站点安装的插件(自 FoxSDR 0.99.74 起)与其他已安装的插件一样,按其 ID 和版本报告;不会报告该站点的地址。
使用的 SDRrtlsdr使用了哪些驱动类型,不包含序列号或任何其他可识别的细节。
  • 保存的内容是您的测试员 ID(绝不是您的代码或地址)、报告被接受的时间、上面提到的会话开始时间、版本、平台、会话时长,以及上面列出的功能、插件和无线电 — 每个被接受的会话一行,最多保留一年后自动删除,计时从会话实际开始的那一刻算起,而不是从报告到达此服务器的时刻算起。
  • 公开显示的内容只是数量,从不是姓名。一旦主页上某插件的卡片的 当前 发布版本至少被两位不同的测试者共使用至少十分钟,该卡片会获得一个小小的“经 N 位测试者测试”提示 —— 低于这个阀值则什么都不显示,也没有任何页面会列出这些测试者是谁。您自己的测试者页面和管理后台中的数字是同一些数据,只是显示得更详细;测试者之间从不会相互公开姓名。
  • 您的 IP 地址仅用于将发送速率控制在合理范围内,并且绝不会写入磁盘。
  • 如何停止:从 FoxSDR 设置中删除测试者代码,之后就不会再发送任何内容。您不需要为此退出测试版计划。
  • 退出计划会删除它。无论是在测试者页面中删除条目,还是要求我们删除,都会将您已记录的每一条会话报告与您条目的其余部分一并删除 —— 这与本节其余部分所述的删除相同,同样适用于这些数据。
  • 法律依据与涵盖您测试者条目其余部分的同一同意相同:输入代码是您自己采取的行为,没有它就不会发送任何内容。

如果你订阅电子邮件新闻

新闻页面只要求一样东西:你的电子邮件地址。保留它是为了在 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 地址,因此请提供该地址以及你大致的访问时间。

对于应用程序,控制项就在软件本身中,共有三个:

  • 系统 → 使用情况报告会停止使用情况报告和五分钟一次的心跳,并删除安装标识符。以后重新开启,你会得到一个无法与旧标识符关联的新标识符。
  • 系统 → 诊断会停止写入或发送崩溃和卡死报告。
  • 系统 → 更新会停止更新检查(在 Microsoft Store 版本中,则是停止向 Microsoft Store 的询问)。

这些报告不包含任何可以与你关联的内容,因此没有什么可以申请访问的;如果你希望从已发送的报告中删除某个安装标识符,请写信到下面的地址并注明该标识符,它将被删除。

儿童。FoxSDR 是面向无线电爱好者的技术仪器。它并非面向儿童,不从任何人那里收集个人信息,因此也不会从儿童那里收集。

请写信至 [email protected]。如果你认为此事处理不当,也可以向英国信息专员办公室(Information Commissioner's Office,ico.org.uk)投诉。

最后更新于 2026 年 9 月 28 日,依据 FoxSDR 0.99.42——即本网站当前提供的构建,上述每一项陈述都已对照其源代码核实。FoxSDR 由 Steven Fox 发布;如对本声明有任何疑问,或希望从已发送的报告中删除某个安装标识符,请写信至上述地址。如果本声明与软件的实际行为不再相符,那就是软件出了错——网站的数据收集在 store.go 和 app.js 中实现,两者都可在网站自己的源代码中查阅;应用程序自己的列表作为 PRIVACY.md 随应用程序一起提供,并有一项测试使有效载荷与之保持一致。