Since Windows 10 Anniversary it is possible to install Ubuntu 14.04 as a Windows subsystem (or something like that). See "Run Bash on Ubuntu on Windows" or any other documentation.
Of course I was curious and tried. Yes, I have a Windows partition. It is just used to upgrade the laptop firmware since it is not easy or even possible to upgrade the Dell laptop firmware from GNU/Linux.
Build
After some time the tools needed to build pcsc-lite and libccid are installed. The two builds are successful.
$ /usr/local/sbin/pcscd --version
pcsc-lite version 1.8.18.
Copyright (C) 1999-2002 by David Corcoran <corcoran musclecard.com>.
Copyright (C) 2001-2015 by Ludovic Rousseau <ludovic .rousseau="" free.fr>.
Copyright (C) 2003-2004 by Damien Sauveron <sauveron labri.fr>.
Report bugs to <pcsclite-muscle@lists.alioth.debian.org>.
Enabled features: Linux x86_64-unknown-linux-gnu serial usb libudev usbdropdir=/usr/local/lib/pcsc/drivers ipcdir=/var/run/pcscd configdir=/usr/local/etc/reader.conf.d
Issues
The build is a success but the execution fails.
Not working libudev
$ sudo /usr/local/sbin/pcscd --foreground --debug
00000000 debuglog.c:289:DebugLogSetLevel() debug level=debug
00001975 configfile.l:358:DBGetReaderList() Parsing conf file: /usr/local/etc/reader.conf.d
00001005 pcscdaemon.c:655:main() pcsc-lite 1.8.18 daemon ready.
libudev: udev_monitor_enable_receiving: bind failed: Invalid argument
00005302 hotplug_libudev.c:758:HPRegisterForHotplugEvents() udev_monitor_enable_receiving() error: -1
^C01658892 pcscdaemon.c:188:signal_thread() read failed: Interrupted system call
Not really surprising, libudev fails to register the reception of events. This was expected since
udev is a device manager for the Linux kernel and we do not have a Linux kernel here.
We could configure pcsc-lite to use libusb instead of libudev to manage hotplug. But that would also not work, see bellow.
Not working libusb
$ lsusb
unable to initialize libusb: -99
The libusb library is not usable.
$ strace lsusb
[...]
gettimeofday({1475313910, 750505}, NULL) = 0
openat(AT_FDCWD, "/dev/bus/usb", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/proc/bus/usb", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/dev", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3
brk(0x1bfa000) = 0x1bfa000
getdents(3, /* 20 entries */, 32768) = 481
getdents(3, /* 0 entries */, 32768) = 0
brk(0x1bf2000) = 0x1bf2000
close(3) = 0
write(2, "unable to initialize libusb: -99"..., 33unable to initialize libusb: -99
) = 33
exit_group(1) = ?
+++ exited with 1 +++
This is because the file system does not provide the USB virtual files in /dev/bus/usb/ or /proc/bus/usb/.
$ ls -l /dev
ls: cannot access /dev/lxss: Operation not permitted
ls: /dev/random: Invalid argument
total 0
drwxr-xr-x 2 root root 0 Oct 1 10:04 block
lrwxrwxrwx 1 root root 13 Oct 1 10:04 fd -> /proc/self/fd
crw------- 1 root root 0, 0 Oct 1 11:28 kmsg
c????????? ? ? ? ? ? lxss
crw-rw-rw- 1 root root 1, 3 Jan 1 1970 null
crw-rw-rw- 0 root tty 5, 2 Oct 1 10:31 ptmx
drwxr-xr-x 0 root root 0 Oct 1 10:04 pts
crw-rw-rw- 1 root root 1, 8 Oct 1 11:28 random
lrwxrwxrwx 1 root root 8 Oct 1 10:04 shm -> /run/shm
lrwxrwxrwx 1 root root 15 Oct 1 10:04 stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 Oct 1 10:04 stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 Oct 1 10:04 stdout -> /proc/self/fd/1
crw------- 1 rousseau tty 4, 1 Oct 1 2016 tty
crw-rw-rw- 1 root tty 4, 0 Oct 1 2016 tty0
crw------- 1 rousseau tty 4, 1 Oct 1 2016 tty1
crw-rw---- 1 root tty 4, 2 Oct 1 11:28 tty2
crw-rw-rw- 1 root root 1, 9 Oct 1 11:28 urandom
crw-rw-rw- 1 root root 0, 0 Oct 1 11:28 zero
$ ls -l /proc
total 0
dr-xr-xr-x 1 root root 0 Oct 1 10:07 1
dr-xr-xr-x 1 rousseau rousseau 0 Oct 1 10:07 2
dr-xr-xr-x 1 rousseau rousseau 0 Oct 1 11:29 22063
-r--r--r-- 1 root root 0 Oct 1 10:04 cmdline
-r--r--r-- 1 root root 0 Oct 1 10:04 cpuinfo
-r--r--r-- 1 root root 0 Oct 1 10:04 filesystems
-r--r--r-- 1 root root 0 Oct 1 10:04 interrupts
-r--r--r-- 1 root root 0 Oct 1 10:04 loadavg
-r--r--r-- 1 root root 0 Oct 1 10:04 meminfo
lrwxrwxrwx 1 root root 0 Oct 1 10:04 mounts -> self/mounts
lrwxrwxrwx 1 root root 0 Oct 1 10:04 net -> self/net
lrwxrwxrwx 1 root root 0 Oct 1 10:04 self -> 22063
-r--r--r-- 1 root root 0 Oct 1 10:04 stat
dr-xr-xr-x 1 root root 0 Oct 1 10:04 sys
-r--r--r-- 1 root root 0 Oct 1 10:04 uptime
-r--r--r-- 1 root root 0 Oct 1 10:04 version
Existing packages
The libccid package is available for this Ubuntu 14.04 in Windows 10.
$ apt-cache policy libccid
libccid:
Installed: (none)
Candidate: 1.4.15-1
Version table:
1.4.15-1 0
500 http://archive.ubuntu.com/ubuntu/ trusty/universe amd64 Packagess
Since I made a build from the source code I have not installed this package.
Port or not
I was curious to know if the packages have been rebuilt for "Windows" with a special configuration. So I selected a package at random (in fact I used a short package name to limit the number of key presses needed to enter the package name. The m4 package is a good candidate for that.).
m4 package as downloaded by apt from "Windows":
$ pwd
/var/cache/apt/archives
$ sha1sum m4_1.4.17-2ubuntu1_amd64.deb
4358d262605ae065a7dc9b6e0c80b3c7f44bf1cc m4_1.4.17-2ubuntu1_amd64.deb
m4 package as downloaded from
http://packages.ubuntu.com/trusty/amd64/m4/download for amd64 architecture:
$ pwd
/mnt/c/Users/Ludovic/Downloads
$ sha1sum m4_1.4.17-2ubuntu1_amd64.deb
4358d262605ae065a7dc9b6e0c80b3c7f44bf1cc m4_1.4.17-2ubuntu1_amd64.deb
The two packages are exactly the same.
The apt repository is the same as for a real Ubuntu system.
$ cat /etc/apt/sources.list
deb http://archive.ubuntu.com/ubuntu trusty main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu trusty-security main restricted universe multiverse
$ dpkg --print-architecture
amd64
Conclusion
As expected many Linux features (udev, USB) are missing. Maybe Microsoft will work on that to provide more support.
I also note that the system is much slower on Ubuntu in Windows than on a real Linux kernel (and a Debian system) on the same hardware. In particular the file system accesses, when installing packages for example, are around an order of magnitude slower.