Re: Webcamd future

Nicolas Goy <[email protected]>
Newsgroups gmane.os.freebsd.devel.ports
Message-ID <[email protected]>
On 	2026-08-23 17:53, Kurt Jaeger wrote:
> Hi!
> 
>>>> What are relations to
>>>> Linux kernel that you mentioned? How this can be avoided?
>>>
>>> If I understand it correctly, webcamd at https://github.com/hselasky/webcamd
>>> was started as a user-space daemon that provides Linux USB Kernel
>>> functions, so that relevant Linux-based webcam drivers can somehow
>>> be integrated.

Yes, I am sorry I wasn't more verbose in my initial message.

When I ask about "finding a home" for the project is something like a 
github organization that could serve as umbrella, or codeberg, or own 
git hosting, the idea is to ensure the community can always take over 
without being locked out. But maybe you prefer the fork way, where I 
fork under my own name, maintain it, and if I abandon it, you do it 
again. I am new to freebsd governance so I do not know what is preferred.
> 
>> Because "daemon currently depends on libc, pthreads, libusb and
>> libcuse" there is not much kernel involved right?
>> Except the Linux
>> kernel is a moving target so the copy-paste into webcamd may not
>> always be trivial :-P
> 
> Yes, I think this is why kuon mentioned Linux kernel topics.
> 

Webcamd is structured this way (disclaimer, I used AI to summarize my 
findings).

WEBCAMD — WHAT'S ORIGINAL VS. COPIED FROM LINUX
================================================

webcamd is a FreeBSD daemon (by H. Selasky) that runs real Linux
kernel USB drivers (webcams, DVB, HID, remotes) in userspace. The
media_tree git submodule points at torvalds/linux.git, pinned to
Linux 5.17-rc1.

ACTUAL WEBCAMD CODE (BSD-2-Clause)
----------------------------------
webcamd.c + webcamd_global.h
     The daemon itself (~1,300 lines).
kernel/
     Linux kernel API emulation shim: linux_func.c, linux_usb.c,
     linux_task/thread/timer/file/firmware/i2c/struct.c,
     linux_list.h, linux_defs.h, etc. Mostly Selasky copyright
     (see exceptions below).
tools/linux_make/
     Build tool that parses Linux Kbuild Makefiles and generates
     the source list.
vtuner/
     VirtualTuner client/server (BSD).
dummy/
     251 files, ALL EMPTY — stub headers so Linux driver #includes
     compile cleanly.
config, config*.in, Makefile
     Kconfig-style build configuration.
man4/ (63 pages), webcamd.8, README.md, www/
     Documentation and branding.

FROM LINUX (GPLv2)
------------------
media_tree/
     The Linux kernel tree itself (submodule, empty in checkout;
     fetched at build time). Compiled directly: drivers/media,
     drivers/hid, drivers/input, drivers/leds, drivers/base/regmap,
     staging/media, sound/i2c/other, lib/lzo, mlx5 core, plus
     lib/kfifo.c and lib/rbtree.c. All ~1500 device drivers are
     Linux code.
patches/
     GPLv2 patches onto media_tree: 0001 adapts ~46 files (UVC,
     gspca, videobuf2, dvb-core, HID...) to the shim; 0002 adds
     extra DVB dongle drivers (tda18273, usbtv).
headers/linux/
     Verbatim Linux headers: i2c.h, i2c-id.h, idr.h.
contrib/dvb-usb/
     TBS QBOX S2 driver (GPLv2, not upstream).
contrib/v4l2loopback/
     v4l2loopback module submodule (GPLv2).

BORDERLINE (inside kernel/)
---------------------------
linux_idr.c    GPLv2, copied from Linux IDR code.
linux_radix.c  FreeBSD radix tree (BSD).
linux_xarray.c Mellanox/FreeBSD linuxkpi (BSD).

BOTTOM LINE
-----------
The daemon, the ~400 KB kernel-API shim, build tooling, and empty
dummy stubs are the real webcamd work. The drivers — the point of
the project — come straight from Linux via media_tree, lightly
patched for userspace. Licensing per COPYING: media_tree + patches
are GPLv2; the rest is BSD-2-Clause except individually copied
Linux helpers.

-- 
Nicolas Goy
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.