WEBVTT
99:59:59.999 --> 99:59:59.999
Debian GNU/Hurd status update
99:59:59.999 --> 99:59:59.999
Let's talk about GNU/Hurd
99:59:59.999 --> 99:59:59.999
For us it's a bit all about freedom 0,
that is, the ability to use software,
99:59:59.999 --> 99:59:59.999
basically, for any purpose.
99:59:59.999 --> 99:59:59.999
And for us, the important thing is that
you shouldn't have to ask
99:59:59.999 --> 99:59:59.999
the system administrator for things.
99:59:59.999 --> 99:59:59.999
You should be allowed to do
whatever you want.
99:59:59.999 --> 99:59:59.999
So for instance, why is fdisk, mke2fs,
etc. hidden in /sbin?
99:59:59.999 --> 99:59:59.999
I want to be able to build disk images,
play with them, mount them, etc.
99:59:59.999 --> 99:59:59.999
So just be able to work with the kind of
disk and network access I have,
99:59:59.999 --> 99:59:59.999
and do whatever I want with this.
99:59:59.999 --> 99:59:59.999
It's about freedom to innovate as well, if
I want to use an experimental filesystem,
99:59:59.999 --> 99:59:59.999
just play with, without being afraid of
crashing the machine.
99:59:59.999 --> 99:59:59.999
You should be able to just
run the file system
99:59:59.999 --> 99:59:59.999
and let the system administrator be happy
with this because it's safe to do this.
99:59:59.999 --> 99:59:59.999
And also, it's a way to provide freedom
from misbehaving programs
99:59:59.999 --> 99:59:59.999
like a driver which doesn't work so well,
some things like this.
99:59:59.999 --> 99:59:59.999
Just to give an idea, in GNU/Hurd,
99:59:59.999 --> 99:59:59.999
you have the kernel which does basically
almost nothing,
99:59:59.999 --> 99:59:59.999
just managing tasks, the memory and
inter-process communications,
99:59:59.999 --> 99:59:59.999
and then you have a lot of daemons
doing the actual stuff,
99:59:59.999 --> 99:59:59.999
so the pfinet is the TCP/IP stack,
and ext2fs does the filesystem thing.
99:59:59.999 --> 99:59:59.999
And then, you have the user,
just running programs.
99:59:59.999 --> 99:59:59.999
And these tools just, actually just talk
to the daemons through the microkernel,
99:59:59.999 --> 99:59:59.999
the microkernel doesn't do much, it just
passes requests along.
99:59:59.999 --> 99:59:59.999
For instance, if a server crashes,
then that's fine.
99:59:59.999 --> 99:59:59.999
For instance a driver crashes,
or just hangs,
99:59:59.999 --> 99:59:59.999
you just can kill and then pfinet
will re-open a new instance of the driver
99:59:59.999 --> 99:59:59.999
and it will just work, thanks to TCP just
continuing to ping the other computer.
99:59:59.999 --> 99:59:59.999
So it's just an error, it's not something
of the death.
99:59:59.999 --> 99:59:59.999
At some point of my desktop, I could
switch off the light,
99:59:59.999 --> 99:59:59.999
and then that would crash my laptop.
99:59:59.999 --> 99:59:59.999
Because switching off the light would
reboot my hard disk, USB hard disk,
99:59:59.999 --> 99:59:59.999
and then the kernel of the laptop
wouldn't like this.
99:59:59.999 --> 99:59:59.999
This is not something which is
supposed to happen.
99:59:59.999 --> 99:59:59.999
So, with a server approach, this is
completely fixed.
99:59:59.999 --> 99:59:59.999
It's also easier to debug, it's really
nice to be able to gdb a TCP/IP stack,
99:59:59.999 --> 99:59:59.999
when there is something happening in there,
just run gdb, you can gprof it, etc.
99:59:59.999 --> 99:59:59.999
You can also dare more crazy things.
99:59:59.999 --> 99:59:59.999
For instance, the Linux console doesn't
support much, because we don't want to put
99:59:59.999 --> 99:59:59.999
too much complex code in there.
99:59:59.999 --> 99:59:59.999
On GNU/Hurd the console actually supports
things like Chinese,
99:59:59.999 --> 99:59:59.999
double-width support, etc.
99:59:59.999 --> 99:59:59.999
which is not supported
by the Linux console,
99:59:59.999 --> 99:59:59.999
and that's right because you don't want
to put too crazy stuff.
99:59:59.999 --> 99:59:59.999
Here since it's just a userland program,
then you're fine,
99:59:59.999 --> 99:59:59.999
and so we do have Chinese support in,
actually, textmode in the Debian Installer.
99:59:59.999 --> 99:59:59.999
Just to show an example, so here I have
ftpfs which uses the TCP/IP stack
99:59:59.999 --> 99:59:59.999
to actually mount a remote directory,
99:59:59.999 --> 99:59:59.999
and then I can use isofs to mount an ISO
image which is inside that FTP server.
99:59:59.999 --> 99:59:59.999
And then I can just let cp copy a file
from the ISO image which is on the server.
99:59:59.999 --> 99:59:59.999
So this translates that way, so I've done
this command a long time ago,
99:59:59.999 --> 99:59:59.999
just to say that "ftp:" in my home
directory is whatever FTP,
99:59:59.999 --> 99:59:59.999
and then I can take a "~/ftp:/etc." URL
and give that to isofs
99:59:59.999 --> 99:59:59.999
and then mount that on my "mnt",
99:59:59.999 --> 99:59:59.999
and then I can just browse inside the ISO
image, without having to download
99:59:59.999 --> 99:59:59.999
the whole ISO image, without having to ask
root for this kind of things, etc.
99:59:59.999 --> 99:59:59.999
And I can also permanently store this
in ext2fs.
99:59:59.999 --> 99:59:59.999
So just to give an example, I have a
translator on my signature files,
99:59:59.999 --> 99:59:59.999
which just calls fortune, so when I
"cat .signature" [demo],
99:59:59.999 --> 99:59:59.999
I get one signature or another, because
each time I open the file,
99:59:59.999 --> 99:59:59.999
it's a new instance of fortune which is
started.
99:59:59.999 --> 99:59:59.999
You can see that, indeed, this is stored
in my signature file.
99:59:59.999 --> 99:59:59.999
So this is fun!
99:59:59.999 --> 99:59:59.999
Another example: as a user, I can start
my own TCP/IP stack,
99:59:59.999 --> 99:59:59.999
tell it to use a virtual network
interface,
99:59:59.999 --> 99:59:59.999
and then put the TCP/IP service on some
node in my home,
99:59:59.999 --> 99:59:59.999
and then I can run openvpn to actually
push and pull packets
99:59:59.999 --> 99:59:59.999
from that virtual interface, and build a
VPN with somewhere else.
99:59:59.999 --> 99:59:59.999
And then I can remap the system, what is
supposed to be the system TCP/IP stack
99:59:59.999 --> 99:59:59.999
into my own socket,
99:59:59.999 --> 99:59:59.999
and then I get a new shell for which the
system TCP/IP stack is actually
99:59:59.999 --> 99:59:59.999
my own TCP/IP stack.
99:59:59.999 --> 99:59:59.999
So I can decide which program actually
uses this TCP/IP stack,
99:59:59.999 --> 99:59:59.999
and just do my own VPN without having to
ask anything to the administrator.
99:59:59.999 --> 99:59:59.999
But also, for instance it happens quite
often that you have a binary,
99:59:59.999 --> 99:59:59.999
maybe not sh, but like, python or perl
or whatever,
99:59:59.999 --> 99:59:59.999
you have a program which wants /bin/sh
to be actually bash or whatever,
99:59:59.999 --> 99:59:59.999
so I want to change this, so I can remap
this, so for instance [demo]
99:59:59.999 --> 99:59:59.999
if I look at sh, so as usual,
oh it's green,
99:59:59.999 --> 99:59:59.999
but you can see here that it's dash,
99:59:59.999 --> 99:59:59.999
and if I remap /bin/sh into /bin/bash, for
instance, I get a new shell where actually,
99:59:59.999 --> 99:59:59.999
sh is not the same, so it's remapped into
/bin/bash,
99:59:59.999 --> 99:59:59.999
and so it's actually bash which actually
shows up here.
99:59:59.999 --> 99:59:59.999
So I do really choose how I work, what my
environment looks like.
99:59:59.999 --> 99:59:59.999
And for instance, I can remap the whole
/bin directory into my own directory,
99:59:59.999 --> 99:59:59.999
where I expose /bin, but also
other things,
99:59:59.999 --> 99:59:59.999
so that programs which have /bin/something
hardcoded into them,
99:59:59.999 --> 99:59:59.999
I can use them without having to ask the
administrator to install stuff inside /bin.
99:59:59.999 --> 99:59:59.999
So it's kind of interesting, a bit like
stow, Nix, Guix, but done in a nice way.
99:59:59.999 --> 99:59:59.999
How does it work? Well it's actually
relatively simple in the principle,
99:59:59.999 --> 99:59:59.999
it's simply that libc doesn't talk with
the kernel or whatever,
99:59:59.999 --> 99:59:59.999
it always uses RPCs, so to ask nicely
about opening files etc.,
99:59:59.999 --> 99:59:59.999
and so it's really natural in GNU/Hurd
that you can redirect things.
99:59:59.999 --> 99:59:59.999
So for instance, the remap translator here
is like, maybe,
99:59:59.999 --> 99:59:59.999
200-300 lines
[Note of transcriptor: 150 actually],
99:59:59.999 --> 99:59:59.999
because it's just a matter of
99:59:59.999 --> 99:59:59.999
"you open a file, OK, I look at the file
path, is it something I want to translate?
99:59:59.999 --> 99:59:59.999
Yes, I translate that, and then I open
the real file,
99:59:59.999 --> 99:59:59.999
and give the new handle to the program",
99:59:59.999 --> 99:59:59.999
and that's all, so it's extremely simple.
99:59:59.999 --> 99:59:59.999
So everything in GNU/Hurd is an RPC and
so it is interposable,
99:59:59.999 --> 99:59:59.999
and then translators get exposed in the
filesystem, we have seen the TCP/IP stack,
99:59:59.999 --> 99:59:59.999
it's just a path inside the filesystem.
99:59:59.999 --> 99:59:59.999
And then the user can decide whatever it
wants to do to interpose whatever.
99:59:59.999 --> 99:59:59.999
So, for instance fakeroot, in Linux,
is quite big,
99:59:59.999 --> 99:59:59.999
because it has to interpose libc symbols,
99:59:59.999 --> 99:59:59.999
and every time libc invents something new,
then it breaks in fakeroot
99:59:59.999 --> 99:59:59.999
because fakeroot has to know about this
new symbol, etc. and interpose them,
99:59:59.999 --> 99:59:59.999
either through ptrace or ld or whatever.
99:59:59.999 --> 99:59:59.999
In GNU/Hurd, fakeroot is, like,
a thousand lines long,
99:59:59.999 --> 99:59:59.999
because it just implements a few basic
things,
99:59:59.999 --> 99:59:59.999
and then everything just works, which just
interpose basic authentication hooks,
99:59:59.999 --> 99:59:59.999
and libc uses them all the time.
99:59:59.999 --> 99:59:59.999
So it's fully virtualizable, and with
a really fine grain interface,
99:59:59.999 --> 99:59:59.999
because you can precisely decide
which RPCs are interposed,
99:59:59.999 --> 99:59:59.999
or which files in the filesystem
are interposed.
99:59:59.999 --> 99:59:59.999
And then you can just use your home
directory, the TCP/IP stack,
99:59:59.999 --> 99:59:59.999
and pile stuff over it, the way you want.
99:59:59.999 --> 99:59:59.999
Just to give a crazy example, we have
a lot of stuff,
99:59:59.999 --> 99:59:59.999
I actually have ISO image inside a
partitioned disk image on FTP over a VPN.
99:59:59.999 --> 99:59:59.999
And this is not so crazy.
99:59:59.999 --> 99:59:59.999
Maybe the ISO image inside the partitioned
disk, the ISO image is a bit too much,
99:59:59.999 --> 99:59:59.999
but one file inside the partitioned disk
image on FTP over VPN is not so crazy,
99:59:59.999 --> 99:59:59.999
because maybe you are on a hostile
network, so you have to use a VPN,
99:59:59.999 --> 99:59:59.999
and then you want to access a file
you know is inside a disk image,
99:59:59.999 --> 99:59:59.999
I don't know, a known disk image which is
provided on a public FTP server,
99:59:59.999 --> 99:59:59.999
and you don't want to download the whole
image just to get, I don't know,
99:59:59.999 --> 99:59:59.999
the README file or something like this.
99:59:59.999 --> 99:59:59.999
So it's not so crazy, and it just
works nicely.
99:59:59.999 --> 99:59:59.999
So a bit more Debian stuff.
99:59:59.999 --> 99:59:59.999
Porting packages to Hurd is quite easy
in principle,
99:59:59.999 --> 99:59:59.999
because it's just a POSIX system, there is
a lot more than just POSIX,
99:59:59.999 --> 99:59:59.999
but it provides a POSIX interface.
99:59:59.999 --> 99:59:59.999
So portable programs should be
really fine.
99:59:59.999 --> 99:59:59.999
Just for fun, some dumb issues, so for
instance some programs think that
99:59:59.999 --> 99:59:59.999
if it's Linux or BSD, then they can
include windows.h...
99:59:59.999 --> 99:59:59.999
Why not...
99:59:59.999 --> 99:59:59.999
If the system has mach.h, that must be
MacOS,
99:59:59.999 --> 99:59:59.999
because MacOS is the only system in the
world that uses Mach, I don't know why...
99:59:59.999 --> 99:59:59.999
Some people try to grep cpuinfo, which
doesn't exist on GNU/Hurd yet,
99:59:59.999 --> 99:59:59.999
and so they basically just run "make -j"
which just explodes the system,
99:59:59.999 --> 99:59:59.999
I mean even on a Linux system it's just
the same, unless it's a small program,
99:59:59.999 --> 99:59:59.999
but with a lot of C++ files it's horrible.
99:59:59.999 --> 99:59:59.999
Some people include limits.h from linux/
instead of just the standard one, well...
99:59:59.999 --> 99:59:59.999
A problematic thing is people who
hardcoded errno values;
99:59:59.999 --> 99:59:59.999
the values of errno are not standardized,
so you shouldn't hardcode them, like,
99:59:59.999 --> 99:59:59.999
in testsuite results or things like this.
99:59:59.999 --> 99:59:59.999
And quite often in configure it's
hardcoded that
99:59:59.999 --> 99:59:59.999
only Linux knows -lpthread or -ldl, etc.
99:59:59.999 --> 99:59:59.999
so quite often programs are not
generic enough,
99:59:59.999 --> 99:59:59.999
and that's just easy to fix, but we have
more and more of these.
99:59:59.999 --> 99:59:59.999
So we have a porter page developing
a bit more about these.
99:59:59.999 --> 99:59:59.999
I wanted to talk a bit more about
PATH_MAX, it is not defined on GNU/Hurd,
99:59:59.999 --> 99:59:59.999
for very good reasons, and it is allowed
by POSIX not to define it,
99:59:59.999 --> 99:59:59.999
just to say that there is no limitation on
the PATH_MAX value,
99:59:59.999 --> 99:59:59.999
we don't have a limit on the size of
the paths.
99:59:59.999 --> 99:59:59.999
And indeed it has a fragile semantic, it
has never meant
99:59:59.999 --> 99:59:59.999
"a reasonable size for a array of
characters to store a path".
99:59:59.999 --> 99:59:59.999
On Linux it's 4000, that's a whole page,
99:59:59.999 --> 99:59:59.999
that's a whole TLB entry for
just one file name.
99:59:59.999 --> 99:59:59.999
It's extremely costly, most people don't
have so long paths,
99:59:59.999 --> 99:59:59.999
and so it's really a pity to use so much
memory, because it's always a whole page
99:59:59.999 --> 99:59:59.999
because it will always be aligned
on 4k etc.
99:59:59.999 --> 99:59:59.999
So, well, that's a waste for one.
99:59:59.999 --> 99:59:59.999
And paths can actually be longer,
there is no strict limitation,
99:59:59.999 --> 99:59:59.999
you can mkdir something, cd into that
mkdir again, cd, etc.,
99:59:59.999 --> 99:59:59.999
you can do that as much as you want,
there is no limitation on this,
99:59:59.999 --> 99:59:59.999
it's just that when you call
99:59:59.999 --> 99:59:59.999
"get current working directory",
you won't get it completely.
99:59:59.999 --> 99:59:59.999
And actually, some programs misbehave
in that case,
99:59:59.999 --> 99:59:59.999
because they won't see these files,
they will be quite actually hidden,
99:59:59.999 --> 99:59:59.999
or protected, or I don't know,
99:59:59.999 --> 99:59:59.999
you can not remove them just giving
the path, you have to cd, cd, cd, cd,
99:59:59.999 --> 99:59:59.999
and then you can access the file.
99:59:59.999 --> 99:59:59.999
And for no reason, actually, because Linux
inside doesn't have
99:59:59.999 --> 99:59:59.999
such limitation, actually.
99:59:59.999 --> 99:59:59.999
And also, it's stupid, but POSIX didn't
really said precisely whether
99:59:59.999 --> 99:59:59.999
the final \0 actually is included in
PATH_MAX or not,
99:59:59.999 --> 99:59:59.999
so people would allocate PATH_MAX+1,
or maybe not.
99:59:59.999 --> 99:59:59.999
So we have a lot of code which doesn't,
maybe, actually work,
99:59:59.999 --> 99:59:59.999
but nobody tests it, actually, because
they would never have so long paths.
99:59:59.999 --> 99:59:59.999
So I'm a bit afraid of all these using
PATH_MAX.
99:59:59.999 --> 99:59:59.999
You should be afraid as well.
99:59:59.999 --> 99:59:59.999
Just to give an overview of the state.
99:59:59.999 --> 99:59:59.999
We have a i386 support, we have a 64bit
support which has started,
99:59:59.999 --> 99:59:59.999
we have the kernel booting,
99:59:59.999 --> 99:59:59.999
and now it's mostly translating between
32 and 64 in our RPCs.
99:59:59.999 --> 99:59:59.999
We have drivers for network boards as a
userland translator, using the DDE layer.
99:59:59.999 --> 99:59:59.999
We have disk, we have a Xen port.
99:59:59.999 --> 99:59:59.999
We have a preliminary sound which was
announced today, using Rump,
99:59:59.999 --> 99:59:59.999
the Rump kernel.
99:59:59.999 --> 99:59:59.999
We don't have USB yet.
99:59:59.999 --> 99:59:59.999
It is quite stable, I haven't reinstalled
my boxes for, like, a decade,
99:59:59.999 --> 99:59:59.999
I don't remember when I installed them,
actually.
99:59:59.999 --> 99:59:59.999
And then the buildd machines just keep
building packages for weeks
99:59:59.999 --> 99:59:59.999
without a problem.
99:59:59.999 --> 99:59:59.999
We have 81% of the archive.
99:59:59.999 --> 99:59:59.999
We have the native Debian Installer which
is really working great.
99:59:59.999 --> 99:59:59.999
Recent work is, like, interesting thing is,
a distributed mtab translator
99:59:59.999 --> 99:59:59.999
to provide /proc/mounts in a hurdish way.
99:59:59.999 --> 99:59:59.999
We have quite a few optimizations which
went in to improve the performance.
99:59:59.999 --> 99:59:59.999
We had releases quite some time ago,
99:59:59.999 --> 99:59:59.999
I really recommend to have a look at this
one, it's fun.
99:59:59.999 --> 99:59:59.999
We've some Wheezy and Jessie snapshots,
99:59:59.999 --> 99:59:59.999
they are not official, but for us it's
really an official thing.
99:59:59.999 --> 99:59:59.999
An important thing I wanted to discuss
this week is the removal from ftp-master.
99:59:59.999 --> 99:59:59.999
This is due since quite a few years now,
honestly,
99:59:59.999 --> 99:59:59.999
it's really not useful to mirror the hurd
packages over the whole world,
99:59:59.999 --> 99:59:59.999
because there are not even as many users
as the number of mirrors.
99:59:59.999 --> 99:59:59.999
So OK, that's fine for just the removal
from the main archive in terms of mirroring.
99:59:59.999 --> 99:59:59.999
But then we have a lot of consequences.
99:59:59.999 --> 99:59:59.999
For instance, buildd.debian.org is really
an important thing,
99:59:59.999 --> 99:59:59.999
because that is where the release team
schedules transitions,
99:59:59.999 --> 99:59:59.999
and loosing this, for us, would be really
tedious work,
99:59:59.999 --> 99:59:59.999
because I've been there, doing, actually,
the transition work,
99:59:59.999 --> 99:59:59.999
the same work as the release team, and
it's really painful to do this again.
99:59:59.999 --> 99:59:59.999
So we would really like to have a solution
for this.
99:59:59.999 --> 99:59:59.999
Maybe get that fed from debian-ports and,
99:59:59.999 --> 99:59:59.999
then that's fine, we can be on
debian-ports, as long as at least
99:59:59.999 --> 99:59:59.999
there is some synchronization between
something.
99:59:59.999 --> 99:59:59.999
And also, getting exposed on the buildd
package status page,
99:59:59.999 --> 99:59:59.999
so that people are aware that there is
some port which is failing,
99:59:59.999 --> 99:59:59.999
and maybe they are keen on spending some
time on it, maybe not,
99:59:59.999 --> 99:59:59.999
but at least get them know about it.
99:59:59.999 --> 99:59:59.999
And also, a corner thing, when we have
a version upgrade, like gcc or perl,
99:59:59.999 --> 99:59:59.999
the release team asks
"OK, we'll have to upgrade the buildds",
99:59:59.999 --> 99:59:59.999
and at the moment they don't even have
an account on them,
99:59:59.999 --> 99:59:59.999
so they can not check whether the version
is good or not.
99:59:59.999 --> 99:59:59.999
Maybe we should just provide an account,
99:59:59.999 --> 99:59:59.999
we'd thus need to know who we need to give
an account to.
99:59:59.999 --> 99:59:59.999
Basically, my idea would be
"OK, that's fine not being on ftp-master".
99:59:59.999 --> 99:59:59.999
The thing is we still want to have most of
the support of Debian,
99:59:59.999 --> 99:59:59.999
to make our life less a burden,
as much as possible,
99:59:59.999 --> 99:59:59.999
without any extra load on
the release team, etc.
99:59:59.999 --> 99:59:59.999
We do understand well that we don't want
to put work on people's hand.
99:59:59.999 --> 99:59:59.999
But we would to still get some benefit and
probably there are solutions for this.
99:59:59.999 --> 99:59:59.999
And conversely, all of this, I mean, not
putting more work on us Hurd porters,
99:59:59.999 --> 99:59:59.999
would actually be the same solutions that
existing ports on debian-ports
99:59:59.999 --> 99:59:59.999
would be really happy to have, to improve
their life, to have less work to do, [...]
99:59:59.999 --> 99:59:59.999
So maybe we want to think about a real
status for Second Class Citizens,
99:59:59.999 --> 99:59:59.999
like Hurd, but also the sparc, hppa, etc.
99:59:59.999 --> 99:59:59.999
Maybe want to have some BoF at some time,
so we can gather and discuss about this.
99:59:59.999 --> 99:59:59.999
Future work, the most interesting thing is
probably using the Rump drivers,
99:59:59.999 --> 99:59:59.999
because at the moment we use DDE but
it's not really going forward.
99:59:59.999 --> 99:59:59.999
We thought it would be a way to get newer
drivers, Linux drivers,
99:59:59.999 --> 99:59:59.999
without extra efforts, but it doesn't
actually happen at the moment,
99:59:59.999 --> 99:59:59.999
while Rump does go forward, we see work
being done with Xen etc.
99:59:59.999 --> 99:59:59.999
So this is probably a long-term solution.
99:59:59.999 --> 99:59:59.999
Maybe we'll have another distribution
through Guix.
99:59:59.999 --> 99:59:59.999
This is progressing, we are quite far from
doing this,
99:59:59.999 --> 99:59:59.999
so for now Debian is really the only Hurd
distribution that we have, so we'll see.
99:59:59.999 --> 99:59:59.999
And of course, just come and have fun with
your own pet project, just join, thanks!
99:59:59.999 --> 99:59:59.999
[Michael Banck] Any quick question before
we run to lunch?
99:59:59.999 --> 99:59:59.999
[Steve Chamberlain] Hello, I just wondered
99:59:59.999 --> 99:59:59.999
if you're using Hurd on that laptop
for the presentation?
99:59:59.999 --> 99:59:59.999
[Samuel Thibault] Yeah, yeah,
this is running Hurd, yes.
99:59:59.999 --> 99:59:59.999
[SC] So it's quite, like, usable everyday?
99:59:59.999 --> 99:59:59.999
[ST] Well, not everyday because
without USB,
99:59:59.999 --> 99:59:59.999
you can not mount a USB stick for instance,
so that's quite inconvenient,
99:59:59.999 --> 99:59:59.999
but yeah, I could probably use it everyday.
99:59:59.999 --> 99:59:59.999
I don't, I mean, for work,
I can not afford this, but yeah.
99:59:59.999 --> 99:59:59.999
Also, we don't have wireless drivers
at the moment.
99:59:59.999 --> 99:59:59.999
We hope that with the Rump drivers
we would get this.
99:59:59.999 --> 99:59:59.999
So, yes.
99:59:59.999 --> 99:59:59.999
Some people do use it everyday.
99:59:59.999 --> 99:59:59.999
Not me.
99:59:59.999 --> 99:59:59.999
[SC] But those would be the major thing
missing for more people
99:59:59.999 --> 99:59:59.999
to be able to use it.
99:59:59.999 --> 99:59:59.999
OK, thanks.
99:59:59.999 --> 99:59:59.999
[MB] Any more questions? We're run out of
questions, then thanks again. Thanks.