DFSG NEW Queue

DFSG, Licensing & New Packages Team

libcanard 0.2+git20250713.601ed35-1

Package Information

Descriptionlightweight DroneCAN protocol stack in C

Libcanard implements the DroneCAN transport protocol for communication between embedded devices over Controller Area Network (CAN) buses. It provides transfer fragmentation and reassembly, node addressing, memory-pool allocation and scalar serialization.

This package contains the shared library with the default classic-CAN, single-interface configuration. This is the DroneCAN implementation, distinct from the Cyphal library of the same name.

MaintainerDebian Robotics Team <team+robotics@tracker.debian.org>
Changed BySteffen Moeller <moeller@debian.org>
Sponsormoeller@debian.org
Distributionunstable
Architectureany
VCSgit: https://salsa.debian.org/robotics-team/libcanard.git (browse)
Closes#1153246
Trackerhttps://tracker.debian.org/pkg/libcanard
Uploaded5 hours ago

New Package Report

.changes◂
Architecturesource amd64
Distributionunstable
DateFri, 06 Nov 2026 19:15:27 +0100
Sourcelibcanard
Version0.2+git20250713.601ed35-1
Changed-BySteffen Moeller <moeller@debian.org>
Changelog◂
libcanard (0.2+git20250713.601ed35-1) unstable; urgency=medium
 .
   * Initial release (Closes: #1153246).
   * Build a versioned shared library and provide development sources for
     applications using a different compile-time ABI configuration.
   * Use system GoogleTest without downloads and add installed-consumer tests.
   * Derive snapshot versions from the upstream commit date and hash.
   * Correct the six example programs' licence to CC0-1.0 in debian/copyright,
     as identified by the NEW queue review.
.dsc◂
Priorityoptional
Componentmain
Package-Listlibcanard-dev deb libdevel optional arch=any
libcanard0 deb libs optional arch=any
Sectionlibdevel
debian/copyright◂
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Source: https://github.com/DroneCAN/libcanard
Upstream-Name: DroneCAN libcanard
Upstream-Contact: https://github.com/DroneCAN/libcanard/issues

Files: *
Copyright:
 2015 UAVCAN
 2016-2019 UAVCAN Team
License: Expat

Files: canard/*.h
Copyright:
 2022 Siddharth B Purohit, CubePilot Pty Ltd
License: Expat

Files: drivers/linux/* drivers/mcast/*
Copyright:
 2023 DroneCAN Team
License: Expat

Files:
 examples/BatteryNode/battery_node.c
 examples/ESCNode/esc_node.c
 examples/ESCNode_C++/esc_node.cpp
 examples/RangeFinder/rangefinder.c
 examples/ServoNode/servo_node.c
 examples/SimpleNode/simple_node.c
Copyright:
 No copyright notice in these files.
License: CC0-1.0
Comment:
 Each source file explicitly dedicates the example application to the
 public domain under CC0 1.0, without naming a copyright holder or year.

Files: debian/*
Copyright: 2026 Steffen Moeller <moeller@debian.org>
License: Expat

License: CC0-1.0
 These example applications are distributed under the CC0 1.0 Universal
 public domain dedication. On Debian systems, the full text can be found
 in /usr/share/common-licenses/CC0-1.0.

License: Expat
 Permission is hereby granted, free of charge, to any person obtaining a
 copy of this software and associated documentation files (the "Software"),
 to deal in the Software without restriction, including without limitation
 the rights to use, copy, modify, merge, publish, distribute, sublicense,
 and/or sell copies of the Software, and to permit persons to whom the
 Software is furnished to do so, subject to the following conditions:
 .
 The above copyright notice and this permission notice shall be included
 in all copies or substantial portions of the Software.
 .
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
 CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

DFSG Assistant LLM REVIEW 0 blocker, 0 important, 0 minor

This is an LLM based review using a Debian Inference based workflow. It was not written by a member of the DFSG team and has not been checked by one. It is not a decision on the package: it may be wrong, and it may have missed things.

Reviewed 4 hours ago.

Report◂

DFSG NEW review for libcanard version 0.2+git20250713.601ed35-1

Summary

  • Licensing is DFSG-compliant and debian/copyright is accurate: Yes
  • Packaging is of good quality: Yes
  • Issues: 0 blocker, 0 important, 0 minor
  • debian/watch: version 5
  • debian/copyright: machine-readable
  • Scan before the review: nothing found

Licensing

debian/copyright is DEP-5 with the correct Format URL, five Files stanzas and standalone License paragraphs for Expat (full text) and CC0-1.0 (pointer to /usr/share/common-licenses/CC0-1.0, which exists). Every file in the tree carries MIT/Expat terms matching the stanza that covers it, except the six example programs, which genuinely carry only a CC0 public-domain statement and are covered by their own stanza placed after the catch-all; all holders named in file headers (UAVCAN, UAVCAN Team, Siddharth B Purohit/CubePilot Pty Ltd, DroneCAN Team, Steffen Moeller) appear in the file. No non-free terms, no unlicensed file, no built or minified artifact needing source, and no vendored third-party code that would need its own notice.

Packaging

Clean initial upload: debhelper compat 14 with a small dh-based rules file, hardening=+all, BUILD_TESTING switched off for nocheck, DEP-3 annotated quilt patch that replaces the network-fetching FetchContent with system GoogleTest and adds versioned library, pkg-config and CMake installation, a complete symbols file with Build-Depends-Package, Multi-Arch: same on both binaries with a correct ${binary:Version} dependency, generated libcanard0/libcanard-dev names that clash with nothing in the archive, an autopkgtest exercising the installed shared library through pkg-config and CMake plus the custom-configuration source build, and upstream/metadata, gbp.conf and salsa-ci present. Standards-Version 4.7.4 matches the reviewing system's Policy 4.7.4.1. No maintainer scripts, no obsolete or unforwarded-remarkable patch content, and no missing or over-tight dependency found.

Issues

None.

Verified ◂
  • debian/copyright read in full: correct Format URL, stanzas in the order Files: , canard/.h, drivers/linux/* and drivers/mcast/, the six examples, debian/; later stanzas override the catch-all as intended.
  • Whole upstream tree (excluding .pc/ and debian/) searched with gitignore:false for Copyright, (C), ©, SPDX-License-Identifier, 'Licensed under', 'Permission is hereby granted', GPL/GNU, LGPL, BSD, ISC, Apache, MPL, non-commercial, CC0, 'public domain', 'All rights reserved' and 'terms of': the only licences present are MIT/Expat and the CC0 statement in the examples.
  • LICENSE is the MIT text with 'Copyright (c) 2015 UAVCAN', matching the '2015 UAVCAN' line of Files: *; the Expat standalone paragraph reproduces the same text, so no full licence text is missing.
  • Holders checked against the file notices: '2016-2019 UAVCAN Team' (canard.c, canard.h, tests/test_rxerr.cpp), '2016-2017 UAVCAN Team' (top-level and tests/ CMakeLists.txt, canard_internals.h), '2016 UAVCAN Team' (drivers/avr, drivers/nuttx, tests/), '2016-2018 UAVCAN Team' (drivers/socketcan), '2017 UAVCAN Team' (drivers/stm32, tests/test_init.cpp), '2016 UAVCAN Team' (show_data_type_info.py) all fall under the Files: * holder list; '2022 Siddharth B Purohit, CubePilot Pty Ltd' (canard/.h) and '2023 DroneCAN Team' (drivers/linux/, drivers/mcast/) have their own stanzas; debian/* names Steffen Moeller.
  • Files: canard/.h also covers canard/tests/.h (canard_interface.h, cxx_test_interface.h, common.h), which is correct behaviour for a copyright-format 6.9 pattern where * also matches /; those headers carry no notice of their own.
  • Each of the six examples (examples/BatteryNode/battery_node.c, ESCNode/esc_node.c, ESCNode_C++/esc_node.cpp, RangeFinder/rangefinder.c, ServoNode/servo_node.c, SimpleNode/simple_node.c) was searched: each has only 'This example application is distributed under the terms of CC0 (public domain dedication).' and no copyright line, exactly as the stanza's Comment states.
  • CC0-1.0 is present in /usr/share/common-licenses, so the pointer in the CC0-1.0 License paragraph resolves.
  • No built files, object files, minified code, PDFs or generated DSDL sources in the tree; the .pc/ copy of the patched CMakeLists.txt, .gitignore, .gitmodules and .travis.yml were passed over as instructed or as upstream files, and the binary files are documentation graphics.
  • The six .jpg screenshots under examples/ and drivers/libuavcan_vs_libcanard_arch.png are documentation images referenced from examples/README.md and drivers/README.md; they are upstream project material and covered by Files: *; not opened.
  • drivers/avr/avr-can-lib is an empty directory left by the git archive of the missing submodule, as debian/README.source states; nothing from it is built or installed, so no third-party licence is needed for it.
  • No vendored copies of third-party libraries: the patch removes the FetchContent downloads of googletest, DSDL and dronecan_dsdlc, and the build uses system GoogleTest.
  • All of debian/ read: control, rules, changelog, copyright, source/format, gbp.conf, salsa-ci.yml, upstream/metadata, README.source, README.Debian, canard_build_config.h, libcanard.pc.in, libcanardConfig.cmake.in, both .install files, both .docs files, libcanard-dev.examples, libcanard0.symbols, patches/series and patches/debian-build.patch, tests/control, tests/consumer, tests/consumer.c. The original tarball contains no debian/ directory and no .git and has the unpatched 3.8 KB CMakeLists.txt.
  • debian/patches/debian-build.patch has a DEP-3 header (Description, Author, Forwarded: not-needed, Last-Update) and touches only upstream files; it adds versioning (VERSION 0.2.0/SOVERSION 0), GNUInstallDirs installation, pkg-config and CMake package files, and restricts the C++ wrapper tests to explicitly supplied DSDL/DSDL compiler directories.
  • debian/libcanard0.symbols gives the soname libcanard.so.0 for package libcanard0, uses #MINVER# and Build-Depends-Package: libcanard-dev; the internal canard_internals.h functions are CANARD_INTERNAL static in the shared library, so the symbols file matches the public API only.
  • libgtest-dev on the reviewing system ships /usr/lib/x86_64-linux-gnu/cmake/GTest/GTestConfig.cmake, so the patched find_package(GTest CONFIG REQUIRED) is satisfiable from the declared Build-Depends; the upstream C tests are registered with gtest_discover_tests, so dh_auto_test actually runs them outside nocheck builds.
  • autopkgtest spec checked with the policy tool: 'Depends: @' expands to every binary package built by the source, so libcanard-dev (pkg-config file, /usr/include/dronecan, /usr/share/libcanard sources) is installed for debian/tests/consumer; its Depends (build-essential, cmake, pkgconf) covers cc, cmake and pkg-config.
  • apt-cache: neither libcanard0 nor libcanard-dev exists in the archive, matching an initial upload; the .dsc lists both and closes bug #1153246.
  • Standards-Version 4.7.4 against the reviewing system's Policy 4.7.4.1 (same first two components), so not an issue; compat 14 is the recommended level, and at compat 13+ dh_missing already defaults to --fail-missing, so the override_dh_missing is redundant but harmless.
  • The package configuration documented in debian/README.Debian (classic CAN, single interface, no deadlines, no TAO override, no allocator semaphore hooks, headers under /usr/include/dronecan) matches debian/canard_build_config.h, debian/libcanard.pc.in and the CMake install rules in the patch.
  • uscan found the packaged version as the newest upstream release (upstream 0.2+git20250713.601ed35, packaged 0.2+git20250713.601ed35).
  • Every pointer of debian/copyright to /usr/share/common-licenses names a file that is there (CC0-1.0).
Not confirmed ◂
  • The C++ wrapper headers canard/*.h are installed by libcanard-dev but never compiled: debian/rules always passes -DCANARD_BUILD_CXX_TESTS=OFF, their test suite needs the unpackaged DSDL definitions and dronecan_dsdlc generator, and debian/tests/consumer is C-only. A compile error in those public headers would not be caught by the build or the autopkgtest until a consumer used them; the reason for disabling the suite is documented in debian/README.source.
  • canard/tests/.cpp and canard/tests/common.h carry no copyright notice and are attributed to '2016-2019 UAVCAN Team' by the Files: * stanza, while the headers beside them are 2022 CubePilot code (canard_interface.h even closes with 'namespace CubeFramework'). If those test sources belong to the same CubePilot C++ wrapper contribution, the holder is wrong and the canard/.h stanza should be widened to cover the directory.
Proposed changes ◂

None.

Uploader's response to the LLM review

The uploader was emailed about the review 4 hours ago.

Other Reviews of this Package

VersionHashAllocatedCompletedReviewerStatusDetails
0.2+git20250713.601ed35-1 e74f25e5… 2026-11-07 15:19 2026-11-07 15:19 dfsg-uploader rejected VIEW

Back to Dashboard | View all reviews for this package