产品说明

目录

  1. 产品概览
  2. 产品优势
  3. 功能一览
  4. 系统架构
  5. 边缘计算指南
  6. 技术栈
  7. 部署流程
  8. 快速开始
  9. API 概览
  10. 配置结构
  11. 更新记录
  12. 界面预览
  13. 许可证

产品概览

Industrial Edge Gateway(工业边缘网关)是一款轻量级工业边缘计算网关软件,面向制造、能源、楼宇等现场部署。核心任务是打通 OT 设备与 IT 系统之间的数据通道,实现:

  • 海量设备连接与数据接入:通过 12 种南向工业协议驱动,统一采集 PLC、DCS、表计、楼宇控制器及网络设备数据;ScanEngine 调度内核负责采集任务编排,写入 ShadowCore 影子设备实时快照。
  • 边缘智能处理与联动:在靠近数据源的边缘端,基于 expr 规则引擎完成逻辑判断、位运算、读-改-写(RMW)及 Sequence/Delay/Check 工作流编排;虚拟影子设备(Virtual Shadow Engine)从多台真实设备选点映射或公式聚合,生成派生虚拟点位,实现本地联动控制与跨设备指标汇总,减轻上行带宽压力。
  • 多系统无缝集成:通过 MQTT、Sparkplug B、OPC UA Server 及 EdgeOS(MQTT/NATS)等北向通道,将处理后的数据对接云平台、SCADA 与企业应用,并支持反向写控。

核心应用场景

场景类别 典型应用 场景描述
PLC 读写控制 生产线自动化控制、设备参数调整 通过 Modbus、S7、EtherNet/IP 等协议实时读写 PLC 寄存器,支持位操作、批量数据采集与反向写控,实现远程设备参数配置与工艺参数下发。
热加载控制硬件 设备固件升级、配置热更新 支持运行时动态加载驱动与配置,无需重启即可接入新设备或修改采集策略,适用于生产现场不停机维护与设备在线升级。
告警联动 温度越限联动、故障自动响应 基于边缘规则引擎实时监测设备状态,触发本地告警联动(如温度过高自动启动冷却系统、设备故障自动切换备用通道),实现毫秒级响应。
设备联合抄表 电能表批量采集、能耗统计 通过 DL/T645、Modbus-RTU 等协议批量读取电表、水表、燃气表数据,支持定时抄表、数据校验与异常识别,生成能耗报表。
跨设备数据聚合 产线效率计算、设备综合指标 Virtual Shadow Engine 聚合多台设备数据,通过公式计算生成派生指标(如设备综合效率 OEE、多泵流量总和、多路温度平均值)。
多设备联动控制 生产线协同、楼宇智能控制 跨协议联动控制多台设备(如 PLC 与 BACnet 楼宇控制器联动、KNX 照明与传感器联动),实现复杂业务流程的自动化编排。
设备远程监控 SCADA 集成、云端可视化 通过 OPC UA Server 或 MQTT 将实时数据推送至 SCADA 系统、云平台或移动应用,支持远程设备状态监控与历史数据分析。
边缘实时决策 质量检测、安全联锁 在边缘端实时分析采集数据,触发质量判定(如产品尺寸偏差检测)或安全联锁(如危险区域人员接近自动停机),减少数据上行延迟。
网络设备监控 交换机/路由器状态采集 通过 SNMP 协议采集网络设备 OID 数据,监控端口流量、设备温度、电源状态等,实现工业网络健康度实时监测与预警。
电力自动化 变电站数据采集、遥控操作 通过 IEC 60870-5-104 协议接入电力系统,支持总召唤、自发上报与单点遥控(M1 阶段),满足电力调度自动化基础需求。

图 1:数据流向示意图


产品优势

丰富的工业协议支持

内置 12 种南向驱动,覆盖 Modbus、BACnet、OPC UA、Siemens S7、EtherNet/IP、Omron FINS、SNMP、IEC 60870-5-104、DL/T645、Mitsubishi SLMP、Profinet IO、KNXnet/IP 等主流工业协议。支持设备发现、对象扫描与批量点位注册,满足 PLC、表计、楼宇与电力等场景的异构接入需求。完整驱动矩阵见 设备驱动;测试覆盖见 南向驱动测试报告

低延迟数据采集与处理

ScanEngine 以 10ms Tick 驱动优先级队列调度,ExecutionLayer 按 Serial / Parallel / Limited 模式隔离执行;ShadowCore 以纯内存快照作为数据真源(SoT),UI、边缘计算与北向接口统一从影子设备读取,缩短数据流转路径。WebSocket 实时推送点位变化,支持通道级 TCP 链路监控(本地/远程地址、连接时长、断开时间)。

轻量灵活部署

单二进制交付,CGO_ENABLED=0 静态编译,无运行时依赖;最低 128MB 内存、1GB 存储即可运行,支持 x86_64、ARMv7、ARM64 及 Linux / Windows。可选 Docker 镜像部署,适合树莓派、工业网关、虚拟机及嵌入式设备。

配置项 最低配置 推荐配置
内存 128MB 512MB+
存储 1GB 4GB+
CPU 单核 双核+

边缘规则与联动控制

内置轻量级 expr 规则引擎,扩展工业位操作语法(v.N / v.bit.N、bitget/bitset 等),支持寄存器 RMW 写保护其他位状态。规则可编排 Sequence(序列)、Delay(延时)、Check(条件检查)等工作流,配套规则运行日志查询与 CSV 导出。

虚拟影子设备

Virtual Shadow Engine 从多台真实设备选点拼积木:直接映射来源点位,或通过公式计算生成新的虚拟点位;结果写入 ShadowCore,供边缘计算规则、北向接口与 UI 实时查询统一消费。数据路径为 南向采集 → 真实影子设备 → Virtual Shadow Engine → 虚拟影子设备 → 边缘计算 / 北向 / UI;真实点位更新后,引擎解析依赖图并增量重算,写入 virtual-{id} 影子。

支持 直接映射(1:1 转发真实点位值,适合跨设备汇聚、点位整理与北向暴露)与 公式计算(引用 channel_id.device_id.point_id 格式来源,支持 + - * / 与括号,用于跨设备求和/平均、倍率换算等派生指标)。积木编辑器支持批量映射、公式模板与依赖引用自动解析。典型场景:跨设备流量汇总、多路温度平均供越限规则、分散点位统一 MQTT/OPC UA 上报、工程单位换算。

智能采集优化

基于设备画像的自适应采集:RTT 管理器(EWMA 动态超时)、MTU 管理器(批量读包大小探测)、Gap 优化器(请求间隔调节)及 Modbus Illegal Address 24h 冷却。统一 ConnectionManager 提供五态状态机、指数退避重连、采集健康检测(以采集成功判断连接健康)与低频补偿探测,提升总线通信效率与稳定性。

组件 技术原理 优化目标
RTT 管理器 EWMA 算法实时监测往返延迟,动态计算超时阈值 避免超时设置不当导致的通信失败
MTU 管理器 自动探测单次通信最大数据包大小 最大化批量采集吞吐量
Gap 优化器 基于设备负载动态调整请求间隔 平衡采集效率与设备负载
ShadowCore 纯内存运行时快照,支持真实/虚拟影子设备 UI 与北向统一读 Shadow,重启后由采集引擎重建
ScanEngine 10ms Tick · PriorityQueue · Scan Class(fast/normal/slow) 统一调度 12 种南向驱动采集任务
ConnectionManager 唯一 dial Owner;EnsureConnected / ScheduleReconnect 全驱动统一重连与 single-flight

北向平台集成

支持 MQTT(自定义 Topic/Payload 模板)、Sparkplug B(NBIRTH/NDEATH/DDATA)、OPC UA Server(双向读写互通)及 EdgeOS 北向通道,便于对接 EMQX、Ignition、云平台及自建数据中心。


功能一览

功能 描述 功能清单
数据采集 南向通道与设备管理,多协议统一接入,ScanEngine 调度采集并写入影子设备 12 种协议驱动 · 通道/设备 CRUD · 设备/对象扫描 · ScanEngine 调度 · ShadowCore 快照 · 通道 TCP 监控 · ConnectionManager 重连
数据上报 将影子设备数据转发至云平台或上层系统,支持反向控制 MQTT · Sparkplug B · OPC UA Server · EdgeOS(MQTT/NATS) · Topic/Payload 映射 · 反向写控
虚拟影子设备 Virtual Shadow Engine 从多台真实设备选点,直接映射或公式计算生成派生虚拟点位 直接映射 · 公式计算 · 积木编辑器 · 依赖图增量重算 · 跨通道聚合 · 北向/UI 统一暴露
边缘计算 基于 expr 规则的本地联动与位操作,减少无效上行 expr 表达式 · 位运算增强 · RMW 写 · Sequence/Delay/Check 工作流 · 规则日志
系统管理 Web 可视化运维与配置管理 Vue 3 管理 UI · JWT / LDAP/AD · 安装向导 · config.db 配置 · 日志查询/导出 · WebSocket 实时数据

系统架构

Edgex V2.0 架构 · ScanEngine引擎

ScanEngine 调度驱动架构

Edgex V2.0 架构 · ScanEngine 统一调度:12 种南向驱动经 ScanEngine 写入真实影子设备快照,Virtual Shadow Engine 生成虚拟影子设备,再联通边缘计算与北向接口。

网关面向工业现场部署,支持多协议南向采集、北向数据共享、规则引擎与可视化运维。核心数据路径遵循 调度驱动架构(ScanEngine 内核):

config.db → ChannelManager → ScanEngine(10ms Tick · PriorityQueue)
                                    ↓ dispatch
                              ExecutionLayer(Serial / Parallel / Limited)
                                    ↓
                              Driver.ReadPoints(纯执行 · ConnectionManager 重连)
                                    ↓
                              ShadowCore (SoT) — 真实影子设备
                                    ↓
                         Virtual Shadow Engine → 虚拟影子设备
                                    ↓
                         ShadowBridge → DataPipeline
                                    ↓
              WebSocket / EdgeCompute / Northbound / 历史值
组件 职责
ChannelManager 通道/设备 CRUD、驱动生命周期、ScanEngineAdapter 任务注册
ScanEngine 内核调度器:时间/资源/执行/状态闭环;Scan Class(fast/normal/slow)
ExecutionLayer SerialQueueManager 硬隔离 + Parallel 三层背压 + Limited 低并发
ShadowCore 影子设备真源(SoT),纯内存运行时快照,承载真实与虚拟影子设备,UI 与北向统一读 Shadow
Virtual Shadow Engine 跨设备点位映射与公式计算,依赖图增量重算,写入 virtual-{id} 虚拟影子设备
ConnectionManager 唯一 dial Owner:EnsureConnected / ScheduleReconnect / single-flight

北向协议:MQTT、Sparkplug B、OPC UA Server、edgeOS(MQTT/NATS)。

近期进展(2026-06):ScanEngine 调度驱动内核已落地(ExecutionLayer + ResourceController + 调度闭环);CollectionScheduler/deviceLoop 已移除;Modbus/DLT645 重连已统一至 ConnectionManager。

南向采集协议

协议 注册名 状态 说明
Modbus TCP / RTU / RTU Over TCP modbus-tcp, modbus-rtu, modbus-rtu-over-tcp 生产就绪 智能 MTU 探测、指数退避、24h 冷却期
BACnet IP bacnet-ip 生产就绪 设备发现、对象扫描、批量读失败回退单读、故障隔离
OPC UA 客户端 opc-ua 生产就绪 读写、订阅监控、Scan/ScanObjects、断线自动重连
Siemens S7 s7 生产就绪 S7-200Smart/1200/1500/300/400;DB、I/Q、M、T、C 区域
EtherNet/IP (ODVA) ethernet-ip 生产就绪 Rockwell ControlLogix/CompactLogix;Tag 批量读取
Omron FINS (TCP/UDP) omron-fins 生产就绪 CIO/D/W/H/EM 等区域;TCP/UDP 双模式
SNMP v2c/v3 snmp 生产就绪 Community / USM 认证;OID 批量采集;ScanObjects
IEC 60870-5-104 iec60870-5-104 M1 已交付 总召唤、自发上报、单点遥控
DL/T645-2007 dlt645 已实现 电能表通信协议
Mitsubishi SLMP mitsubishi-slmp 生产就绪 MC Protocol
Profinet IO profinet-io 已实现 DCP/RPC I/O 模块读写;本地网口绑定
KNXnet/IP knxnet-ip 生产就绪 网关发现;组地址读写;TCP/UDP 双模式

北向上报协议

协议 状态 说明
MQTT 已交付 自定义 Topic、Payload 模板,批量点位映射与反向控制
Sparkplug B 已交付 NBIRTH、NDEATH、DDATA 消息规范
OPC UA 服务端 已交付 多种认证方式,南向数据自动映射,支持反向写控
EdgeOS 已交付 MQTT/NATS 北向通道,对接 EdgeOS 平台

边缘计算指南

图 2:虚拟影子引擎示意图

本网关内置边缘计算引擎,支持基于规则的本地联动控制,特别针对工业位操作进行了深度优化。

1. 表达式语法

规则引擎兼容 expr 语言,并扩展了工业场景专用的语法糖:

基础变量:

  • v: 当前点位的实时值

位操作增强: 支持 1-based (v.N) 和 0-based (v.bit.N) 两种风格:

语法/函数 索引方式 说明 等效函数
v.N 1-based 获取第 N 位 (从1开始) bitget(v, N-1)
v.bit.N 0-based 获取第 N 位 (索引从0开始) bitget(v, N)

内置位运算函数:

  • bitget(v, n): 获取第 n 位 (0/1)
  • bitset(v, n): 将第 n 位置 1
  • bitclr(v, n): 将第 n 位置 0
  • bitand(a, b), bitor(a, b), bitxor(a, b), bitnot(a)
  • bitshl(v, n) (左移), bitshr(v, n) (右移)

2. 智能写入机制 (读-改-写)

当对寄存器进行位操作写入时,网关采用 RMW(读-改-写)机制,确保不破坏其他位的状态。

流程:

  1. :驱动读取当前点位完整值
  2. :根据公式计算新值
  3. :将新值写入设备

3. 工作流引擎

图 3:边缘流示意图

规则引擎支持高级工作流编排:

  • 序列 (Sequence): 按顺序执行一系列动作
  • 延时 (Delay): 在动作之间插入等待时间
  • 检查 (Check): 验证某个条件是否满足

图 4:边缘核心示意图

4. 虚拟影子设备

Virtual Shadow Engine 从多台真实设备选点拼积木,将结果写入 ShadowCore,供边缘计算规则、北向接口与 UI 统一消费。

数据流: 南向采集 → 真实影子设备 → Virtual Shadow Engine → 虚拟影子设备 → 边缘计算 / 北向 / UI。单点位更新链路:真实点位值更新 → 解析公式依赖图 → 增量重算虚拟点位 → 写入 virtual-{id} 影子。

点位模式:

模式 说明 适用场景
直接映射 (Map) 1:1 转发真实点位值,表达式即来源引用 跨设备汇聚开关量、点位整理、北向暴露前的命名空间统一
公式计算 (Formula) 引用 channel_id.device_id.point_id 来源,支持 + - * / 与括号 跨设备求和/差值/平均、倍率换算、简单派生指标

配置流程: 选择源设备通道 → 勾选/拖拽点位 → 批量映射或手动添加积木 → 切换映射/公式、设置虚拟点位 ID 与单位 → 保存启用。保存后引擎按依赖图增量计算;可先验证映射点位实时值,再叠加跨设备公式。

典型场景: 跨设备流量汇总(如 pump_a.flow + pump_b.flow → total_flow)、多路温度平均供越限规则、分散点位整理后统一北向 MQTT/OPC UA 上报、工程单位换算(如 raw_value * 0.1)。虚拟点位 quality 取决于所有依赖点位;任一路离线会导致计算结果 quality 降级。


技术栈

后端: Go 1.25+

前端: Vue 3

  • 构建工具: Vite
  • UI 库: Vuetify 3
  • 路由: Vue Router 4
  • HTTP 客户端: Axios

部署流程

1. 环境要求

项目 最低 推荐
内存 128MB 512MB+
存储 1GB 4GB+
CPU 单核 双核+
Go(源码编译) 1.25+
Node.js(前端编译) 16+
GoReleaser v2 最新版 一键多平台打包

支持 Linux / Windows,架构:x86_64、ARMv7、ARM64。

2. 编译方式

一键多平台打包(推荐)

项目使用 GoReleaser.goreleaser.yml)统一构建前端与后端,并生成分平台安装包。GoReleaser 内置 nfpm,用于生成 .deb 包,无需单独安装 nfpm。

# 安装 GoReleaser(任选其一)
go install github.com/goreleaser/goreleaser/v2@latest
# 或 brew install goreleaser

# 在仓库根目录执行:清理 dist/ 并构建(snapshot 模式,不发布 GitHub Release)
goreleaser release --snapshot --clean

构建流水线before.hooks):

  1. go mod tidy — 整理 Go 依赖
  2. npm run build --prefix ./ui — 构建 Vue 前端至 ui/dist/

交叉编译目标CGO_ENABLED=0,入口 ./cmd/main.go,二进制名 edgex):

平台 架构
Linux amd64、arm64、arm/v7
Windows amd64(不含 arm/arm64)

产物目录 ./dist/

类型 说明
tar.gz edgex-{version}-{os}-{arch}.tar.gz,含二进制、conf/scripts/edgex.serviceedgex.shui/dist/
deb edgex-v{version}-{arch}.deb,安装至 /usr/local/bin/edgex,含 systemd 单元与前端静态资源
SHA256SUMS 各产物校验和

版本信息通过 ldflags 注入:VersionBuildTimeCommitID(snapshot 模式下版本号为 snapshot 标识)。

snapshot vs 正式发布--snapshot 仅本地/CI 构建,不上传 Release。推送 v* 标签并执行 goreleaser release(无 --snapshot)时,按配置创建 draft GitHub Release(release.draft: true)。

手动编译(开发 / 单平台)

git clone https://github.com/anviod/edgex.git
cd edgex
go mod tidy

# 后端:静态编译,无 CGO 依赖
CGO_ENABLED=0 go build -o edgex ./cmd/main.go

# 前端(生产环境推荐,产物由后端托管 ui/dist)
cd ui && npm install && npm run build && cd ..

3. 目录与配置

路径 说明
data/ 运行时数据目录;config.db 存储配置(首次启动为空则进入安装向导)
logs/ 运行日志(默认 logs/gateway.edgex.log
conf/ 遗留 YAML 配置,用于一次性迁移(-conf 参数指定,默认 ./conf

首次启动若 data/config.db 不存在,网关以安装模式启动,通过 Web UI 完成初始化。

4. 启动服务

# 默认配置目录 ./conf,HTTP 端口见 server 配置(常见 8080/8082)
./edgex

# 指定遗留 YAML 迁移目录
./edgex -conf ./conf/

访问 http://localhost:<port> 进入管理界面。默认账号见安装向导或 conf/users.yaml

5. Docker 部署(可选)

docker pull anviod/edgex:latest

docker run -d \
  --name edgex \
  -p 8082:8082 \
  -p 47808:47808/udp \
  -v /path/to/data:/opt/edgex/data \
  --restart unless-stopped \
  anviod/edgex:latest

6. 生产部署参考


快速开始

前置要求

  • Go 1.25+
  • Node.js 16+(仅用于编译前端)

1. 启动后端

# 获取依赖
go mod tidy

# 运行网关
go run cmd/main.go

# 或者指定配置目录
go run cmd/main.go -conf ./conf/

2. 编译前端

cd ui

# 安装依赖
npm install

# 编译生产环境代码
npm run build

访问 http://localhost:8082(默认端口)即可进入管理界面。
默认账号见 conf/users.yaml(admin / passwd@123)。

3. 设备扫描与点位管理(BACnet)

  • 通道页面进入设备 → 点位列表 → 点击”扫描点位”即可从设备读取对象列表
  • 勾选后点击”添加选定点位”,系统将以 Type:Instance 地址批量注册
  • 发现流程:优先单播 WhoIs,失败后进行多网口广播;仍失败时使用配置地址回退构造设备并标记为离线

4. OPC UA 服务端指南

安全连接:

  • 默认启用 Basic256Sha256(SignAndEncrypt)安全策略
  • 自动生成有效期 10 年的自签名证书
  • 支持 admin / admin(默认)登录

双向互通:

  • 数据上报: 所有南向通道采集的数据自动映射到 OPC UA 地址空间
  • 反向控制: 支持客户端直接修改点位值,网关自动透传写入指令至底层设备

API 概览

所有 API 需要携带认证头:Authorization: Bearer <token>

功能 API 方法
扫描通道设备 /api/channels/:channelId/scan POST
扫描设备对象 /api/channels/:channelId/devices/:deviceId/scan POST
获取点位列表 /api/channels/:channelId/devices/:deviceId/points GET
添加点位 /api/channels/:channelId/devices/:deviceId/points POST
更新点位 /api/channels/:channelId/devices/:deviceId/points/:pointId PUT
删除点位 /api/channels/:channelId/devices/:deviceId/points/:pointId DELETE
实时数据订阅 /api/ws/values GET
获取边缘计算日志 /api/edge/logs GET
导出边缘计算日志 /api/edge/logs/export GET

配置结构

配置文件已拆分为模块化 YAML 文件,位于 conf/ 目录:

  • server.yaml: HTTP 服务器端口、静态资源路径
  • channels.yaml: 南向通道及设备配置
  • northbound.yaml: 北向 MQTT/SparkplugB 配置
  • edge_rules.yaml: 边缘计算规则配置
  • system.yaml: 系统级网络配置
  • users.yaml: 用户账号管理
  • storage.yaml: 数据库路径配置

生产环境推荐使用 data/config.db(BoltDB)存储配置;首次启动若不存在则进入 Web 安装向导。

示例(BACnet 通道片段):

id: bac-test-1
protocol: bacnet-ip
config:
  interface_port: 47808
devices:
  - id: "2228316"
    enable: true
    interval: 2s
    config:
      device_id: 2228316
      ip: 192.168.3.112
      port: 47808
    points:
      - id: AnalogInput_0
        name: Temperature.Indoor
        address: AnalogInput:0
        datatype: float32
        readwrite: R

更新记录

最近更新

  • 2026-06:
    • ScanEngine 调度驱动内核落地:ExecutionLayer + ResourceController + 调度闭环;CollectionScheduler/deviceLoop 已移除
    • ConnectionManager 统一重连:Modbus/DLT645 等驱动重连已统一至 ConnectionManager
    • SNMP v2c/v3 与 Omron FINS 驱动正式发布
    • Profinet IO 与 KNXnet/IP 驱动: I/O 模块采集与楼宇自动化网关接入
    • IEC 60870-5-104 M1 交付: 总召唤、自发上报、单点遥控
    • 南向驱动测试报告: 单元测试、性能基准与边界场景覆盖矩阵
    • 采集健康检测: 取消独立心跳,以采集成功判断连接健康
    • BACnet 半开探测优化: 冷却期结束自动探测设备恢复
  • 2026-05:
    • S7 协议完整支持: S7-200Smart/1200/1500/300/400 全系列 PLC
    • 连接生命周期系统: 状态机、指数退避、冷却期策略
  • 2026-02-25:
    • 点位管理增强: 实现点位批量删除功能,支持基于搜索关键词和质量状态的响应式实时过滤
    • Modbus 稳定性优化: 增加非法数据地址自动检测与 24 小时长冷却机制
  • 2026-02-24:
    • TCP 链路深度监控: 增加本地 IP:端口、远程 IP:端口、链接时长及最后断开时间显示
    • 链路展示优化: 前端显示优化为直观的「本地 -> 远程」连接模式
  • 2026-02-20:
    • Modbus 智能 MTU 探测: 自动探测并保存从站支持的最大寄存器数量
    • Modbus 指数退避重连: 优化连接策略,避免网络抖动时的频繁重连尝试

界面预览

概览与系统

登录页

登录页

首页监控

首页监控

系统设置

系统设置相关

南向采集

通道列表

南向通道采集

通道监控指标

通道监控指标

BACnet 设备发现

BACnet设备发现扫描

BACnet 设备发现结果

BACnet设备发现扫描结果

BACnet 点位扫描

BAC点位对象扫描发现

OPC UA模型扫描

OPC UA设备模型扫描

OPC UA模型扫描结果

OPC UA设备模型扫描结果

OPC UA数据订阅

OPC UA设备数据订阅

OPC UA数据转换

OPC UA设备数据转换

边缘计算

计算监控

边缘计算监控

规则配置

边缘计算规则配置

边缘计算规则支持类型

边缘计算规则支持类型

边缘计算规则支持动作类型

边缘计算规则支持动作类型

规则帮助手册

边缘计算规则帮助手册

规则日志

边缘计算规则运行日志查询导出

北向数据

北向总览

北向数据共享总览页面

MQTT 监控

北向数据共享MQTT运行监控

MQTT 手册

北向数据共享MQTT帮助手册


许可证

Mozilla Public License 2.0 (MPL-2.0)