// the find
FreeOpcUa/freeopcua
Open Source C++ OPC-UA Server and Client Library
A C++ OPC-UA client and server library under LGPL, with a native Python binding on top. It suits developers who need to read and write PLC or SCADA data from C++ or Python without buying a commercial SDK, and who can accept a feature set that stops short of security and history.
- The standard address space is generated from the OPC Foundation's NodeSet2 XML files by the scripts in schemas/, not typed in by hand. Regenerating after a spec update is a script run rather than a manual port.
- The README lists interop testing against UaExpert, Unified Automation, Prosys, node-opcua and Ignition. For an OPC-UA library that is the evidence that matters, and few open-source projects in this space publish it.
- Server pieces are addons loaded through addon_manager and dynamic_addon_factory, so the transport, address space and subscription service can be swapped without forking the server. The Python module is native and ships with examples and a high-level test file, so it is usable from scripts without the C++ build.
- LGPL rather than GPL, so a closed-source application can link it dynamically under the usual terms.
- Security is not implemented. The README says authentication and certificate handling are missing, and those are most of what OPC-UA adds over older industrial protocols. Anything beyond a locked-down lab network needs that work first.
- The project looks stalled. The last push was August 2024, the Travis badge points at travis-ci.org, which has been retired, and the build instructions still cite VS13, gcc 4.8 and Boost 1.56. Expect to fix the build before you can test anything.
- History, server-side methods, StatusChange events and event filtering are listed as unfinished or absent. A monitoring application that needs historical data will have to build that layer itself.
- Documentation is sparse by the README's own account. The examples and one Python test file are the reference, and the README admits that legacy hand-written protocol code is still being migrated to generated code, so parts of the codebase are mid-transition.