Em 22-06-2011 11:03, HoP escreveu: > 2011/6/22 Mauro Carvalho Chehab <mche...@redhat.com>: >> Em 22-06-2011 10:13, Andreas Oberritter escreveu: >>> On 06/22/2011 03:03 PM, Mauro Carvalho Chehab wrote: >>>> Em 22-06-2011 09:37, HoP escreveu: >>>>> 2011/6/22 Mauro Carvalho Chehab <mche...@redhat.com>: >>>>>> Em 21-06-2011 14:38, HoP escreveu: >>>>>>> 2011/6/21 Mauro Carvalho Chehab <mche...@redhat.com>: >>>>>>>> Em 21-06-2011 12:09, Andreas Oberritter escreveu: >>>>>>>>> On 06/21/2011 04:35 PM, Mauro Carvalho Chehab wrote: >>>>>>>>>> Em 21-06-2011 11:15, Andreas Oberritter escreveu: >>>>>>>>>>> On 06/21/2011 03:44 PM, Devin Heitmueller wrote: >>>>>>>>>>>> On Tue, Jun 21, 2011 at 7:04 AM, Andreas Oberritter >>>>>>>>>>>> <o...@linuxtv.org> wrote: >>>>>>>>>>>>> Mauro and Devin, I think you're missing the point. This is not >>>>>>>>>>>>> about >>>>>>>>>>>>> creating drivers in userspace. This is not about open or closed >>>>>>>>>>>>> source. >>>>>>>>>>>>> The "vtuner" interface, as implemented for the Dreambox, is used >>>>>>>>>>>>> to >>>>>>>>>>>>> access remote tuners: Put x tuners into y boxes and access them >>>>>>>>>>>>> from >>>>>>>>>>>>> another box as if they were local. It's used in conjunction with >>>>>>>>>>>>> further >>>>>>>>>>>>> software to receive the transport stream over a network >>>>>>>>>>>>> connection. >>>>>>>>>>>>> Honza's code does the same thing. >>>>>>>>>>>> >>>>>>>>>>>> I'm not missing the point at all. I realize exactly what Honza is >>>>>>>>>>>> trying to accomplish (and from a purely technical standpoint, it's >>>>>>>>>>>> not >>>>>>>>>>>> a bad approach) - but I'm talking about the effects of such a >>>>>>>>>>>> driver >>>>>>>>>>>> being introduced which changes the kernel/userland licensing >>>>>>>>>>>> boundary >>>>>>>>>>>> and has very real implications with how the in-kernel code is >>>>>>>>>>>> accessed. >>>>>>>>>>>> >>>>>>>>>>>>> You don't need it in order to create closed source drivers. You >>>>>>>>>>>>> can >>>>>>>>>>>>> already create closed kernel drivers now. Also, you can create >>>>>>>>>>>>> tuner >>>>>>>>>>>>> drivers in userspace using the i2c-dev interface. If you like to >>>>>>>>>>>>> connect >>>>>>>>>>>>> a userspace driver to a DVB API device node, you can distribute a >>>>>>>>>>>>> small >>>>>>>>>>>>> (open or closed) wrapper with it. So what are you arguing about? >>>>>>>>>>>>> Everything you're feared of can already be done since virtually >>>>>>>>>>>>> forever. >>>>>>>>>>>> >>>>>>>>>>>> I disagree. There is currently no API which allows applications to >>>>>>>>>>>> issue tuning requests into the DVB core, and have those requests >>>>>>>>>>>> proxied back out to userland where an application can then use >>>>>>>>>>>> i2c-dev >>>>>>>>>>>> to tune the actual device. Meaning if somebody wants to write a >>>>>>>>>>>> closed source userland application which controls the tuner, he/she >>>>>>>>>>>> can do that (while not conforming to the DVB API). But if if he >>>>>>>>>>>> wants >>>>>>>>>>>> to reuse the GPL licensed DVB core, he has to replace the entire >>>>>>>>>>>> DVB >>>>>>>>>>>> core. >>>>>>>>>>>> >>>>>>>>>>>> The introduction of this patch makes it trivial for a third party >>>>>>>>>>>> to >>>>>>>>>>>> provide closed-source userland support for tuners while reusing all >>>>>>>>>>>> the existing GPL driver code that makes up the framework. >>>>>>>>>>>> >>>>>>>>>>>> I used to work for a vendor that makes tuners, and they do a bunch >>>>>>>>>>>> of >>>>>>>>>>>> Linux work. And that work has resulted in a bunch of open source >>>>>>>>>>>> drivers. I can tell you though that *every* conversation I've had >>>>>>>>>>>> regarding a new driver goes something like this: >>>>>>>>>>>> >>>>>>>>>>>> === >>>>>>>>>>>> "Devin, we need to support tuner X under Linux." >>>>>>>>>>>> >>>>>>>>>>>> "Great! I'll be happy to write a new GPL driver for the >>>>>>>>>>>> tuner/demodulator/whatever for that device" >>>>>>>>>>>> >>>>>>>>>>>> "But to save time/money, we just want to reuse the Windows driver >>>>>>>>>>>> code >>>>>>>>>>>> (or reference code from the vendor)." >>>>>>>>>>>> >>>>>>>>>>>> "Ok. Well, what is the licensing for that code? Is it GPL >>>>>>>>>>>> compatible?" >>>>>>>>>>>> >>>>>>>>>>>> "Not currently. So can we just make our driver closed source?" >>>>>>>>>>>> >>>>>>>>>>>> "Well, you can't reuse any of the existing DVB core functionality >>>>>>>>>>>> or >>>>>>>>>>>> any of the other GPL drivers (tuners, bridges, demods), so you >>>>>>>>>>>> would >>>>>>>>>>>> have rewrite all that from scratch." >>>>>>>>>>>> >>>>>>>>>>>> "Oh, that would be a ton of work. Can we maybe write some >>>>>>>>>>>> userland >>>>>>>>>>>> stuff that controls the demodulator which we can keep closed >>>>>>>>>>>> source? >>>>>>>>>>>> Since it's not in the kernel, the GPL won't apply". >>>>>>>>>>>> >>>>>>>>>>>> "Well, you can't really do that because there is no way for the DVB >>>>>>>>>>>> core to call back out to userland when the application makes the >>>>>>>>>>>> tuning request to the DVB core." >>>>>>>>>>>> >>>>>>>>>>>> "Oh, ok then. I guess we'll have to talk to the vendor and get >>>>>>>>>>>> them >>>>>>>>>>>> to give us the reference driver code under the GPL." >>>>>>>>>>>> === >>>>>>>>>>>> >>>>>>>>>>>> I can tell you without a doubt that if this driver were present in >>>>>>>>>>>> the >>>>>>>>>>>> kernel, that going forward that vendor would have *zero* interest >>>>>>>>>>>> in >>>>>>>>>>>> doing any GPL driver work. Why would they? Why give away the code >>>>>>>>>>>> which could potentially help their competitors if they can keep it >>>>>>>>>>>> safe and protected while still being able to reuse everybody else's >>>>>>>>>>>> contributions? >>>>>>>>>>>> >>>>>>>>>>>> Companies don't contribute GPL code out of "good will". They do it >>>>>>>>>>>> because they are compelled to by licenses or because there is no >>>>>>>>>>>> economically viable alternative. >>>>>>>>>>>> >>>>>>>>>>>> Mauro, ultimately it is your decision as the maintainer which >>>>>>>>>>>> drivers >>>>>>>>>>>> get accepted in to the kernel. I can tell you though that this >>>>>>>>>>>> will >>>>>>>>>>>> be a very bad thing for the driver ecosystem as a whole - it will >>>>>>>>>>>> essentially make it trivial for vendors (some of which who are >>>>>>>>>>>> doing >>>>>>>>>>>> GPL work now) to provide solutions that reuse the GPL'd DVB core >>>>>>>>>>>> without having to make any of their stuff open source. >>>>>>>>>>>> >>>>>>>>>>>> Anyway, I said in my last email that would be my last email on the >>>>>>>>>>>> topic. I guess I lied. >>>>>>>>>>> >>>>>>>>>>> Yes, and you did lie to your vendor, too, as you did not mention the >>>>>>>>>>> possibilities to create >>>>>>>>>>> 1.) closed source modules derived from existing vendor drivers while >>>>>>>>>>> still being able to use other drivers (c.f. EXPORT_SYMBOL vs. >>>>>>>>>>> EXPORT_SYMBOL_GPL). >>>>>>>>>> >>>>>>>>>> AFAIK, the legal issues on writing a closed source driver using >>>>>>>>>> EXPORT_SYMBOL >>>>>>>>>> are not proofed legally in any court. While EXPORT_SYMBOL_GPL >>>>>>>>>> explicitly >>>>>>>>>> adds a restriction, not using it doesn't necessarily mean that the >>>>>>>>>> symbol >>>>>>>>>> can be used by a closed source driver. >>>>>>>>>> >>>>>>>>>> If you take a look at Kernel's COPYING file, the only exception to >>>>>>>>>> GPL license >>>>>>>>>> allowed there is: >>>>>>>>>> >>>>>>>>>> NOTE! This copyright does *not* cover user programs that use >>>>>>>>>> kernel >>>>>>>>>> services by normal system calls - this is merely considered >>>>>>>>>> normal use >>>>>>>>>> of the kernel, and does *not* fall under the heading of >>>>>>>>>> "derived work". >>>>>>>>>> >>>>>>>>>> IANAL, but, as EXPORT_SYMBOL is not a "normal system call", my >>>>>>>>>> understanding is that >>>>>>>>>> it is also covered by GPL. >>>>>>>>> >>>>>>>>> Of course. But as you should know, the GPL only covers derived work. >>>>>>>>> Whether or not a driver is a derived work of the kernel can only be >>>>>>>>> decided individually. It is my understanding that a Windows driver >>>>>>>>> ported to Linux is unlikely to be a derived work of Linux. >>>>>>>>> >>>>>>>>>> I was told that several lawyers defend the idea that all software >>>>>>>>>> inside the >>>>>>>>>> kernel tree is covered by GPL, even the aggregated ones. That was >>>>>>>>>> the rationale >>>>>>>>>> used to split the firmware packages from the kernel itself. >>>>>>>>> >>>>>>>>> However, I wasn't referring to the kernel tree at all. >>>>>>>>> >>>>>>>>>>> 2.) a simple wrapper that calls userspace, therefore not having to >>>>>>>>>>> open >>>>>>>>>>> up any "secrets" at all. >>>>>>>>>> >>>>>>>>>> A wrapper for a closed source driver is illegal, as it is trying to >>>>>>>>>> circumvent >>>>>>>>>> the GPL license. >>>>>>>>> >>>>>>>>> Is it? First, you are not a lawyer. Second, a wrapper is unlikely to >>>>>>>>> be >>>>>>>>> illegal by its pure existence and a wrapper does usually not try to do >>>>>>>>> anything by itself. Third, you can implement a wrapper using normal >>>>>>>>> system calls (read, write, mmap, ioctl ...). That's what vtuner does, >>>>>>>>> too, to accomplish a totally different goal. Do you think vtuner is >>>>>>>>> illegal? I would be very surprised if it was. It perfectly matches the >>>>>>>>> license exception cited above. And even without the exception, a >>>>>>>>> closed >>>>>>>>> driver in userspace would only very unlikely be a derived work of the >>>>>>>>> kernel. >>>>>>>> >>>>>>>> I think we're diverging from the subject. Most of those discussions are >>>>>>>> interesting on some lawyers forum, not here. >>>>>>>> >>>>>>>> My view about this subject is that vtuner can't give any additional >>>>>>>> permissions >>>>>>>> to the kernel GPL'd code, as vtuner were not made by the Kernel >>>>>>>> Copyright owners, >>>>>>>> nor were approved by them. So, the extra permission at the COPYING >>>>>>>> clause >>>>>>>> from kernel doesn't apply here, while the code is not merged into the >>>>>>>> Kernel. >>>>>>>> >>>>>>>> So, while it should be legal to use vtuner with a GPL'd client >>>>>>>> application, >>>>>>>> using it by a closed source application violates GPL. >>>>>>>> >>>>>>>> My understanding is that an addition of a code that exposes the >>>>>>>> internal >>>>>>>> DVB core API to userspace like that will require that all dvb >>>>>>>> developers >>>>>>>> that have copyright rights at the dvb core should explicitly ack with >>>>>>>> such >>>>>>>> change, otherwise adding such code will violate the original license. >>>>>>>> >>>>>>>> On the other hand, if vtunerc won't act as a proxy to userspace, it >>>>>>>> should >>>>>>>> probably be ok. >>>>>>> >>>>>>> Are you serious? Why there is not same violation on NFS? Or even beter >>>>>>> example NBD (network block device)? It sits in kernel for ages and >>>>>>> nobody >>>>>>> cares. It looks for me like you should send some patch for removal such >>>>>>> "weak" places in kernel which allow to violate GPL. >>>>>>> >>>>>>> Do you really think that it is possible (in real, no in threory) to >>>>>>> create >>>>>>> any networked subsystem for sharing anything over net the way >>>>>>> when it is not exposed (somehow) to the userspace? How will be >>>>>>> such system managable? Why there is usually companion daemon >>>>>>> there, which is responsible for managing connections etc? >>>>>>> >>>>>>> I think it is very evident you want find the way how to get yours word >>>>>>> back and return to your original position = such code is not acceptable. >>>>>>> Even if you still are not able to give anything clear. >>>>>>> >>>>>>> If I understand your last few mails, you won't accept such driver, >>>>>>> isn't it? >>>>>> >>>>>> You got wrong. You can't change someone's else license without their >>>>>> acks. >>>>> >>>>> That I understand very well. I never want to force anybody to change >>>>> his licence. >>>>> >>>>> I simply don't believe you that it is necessary. Why the same was not >>>>> needed >>>>> with USBIP driver? If you check theirs nice big picture on >>>>> http://usbip.sourceforge.net/ >>>>> you see that it is exactly same technology like vtunerc, but for USB >>>>> subsystem. >>>>> Why such driver exists at all? >>>>> >>>>> And I'm sure I can find more examples inside kernel tree. What about NBD >>>>> (http://nbd.sourceforge.net)? Do you want find me more examples? >>>>> >>>>>> It is as simple as that. Getting everybody's ack is not that hard, if >>>>>> they >>>>>> accept that what you're doing is the right thing. We've got everybody's >>>>>> ack in the past to change the licensing for videodev2.h for example, to >>>>>> allow >>>>>> using the V4L2 API under BSD license (just the license API was changed, >>>>>> not the >>>>>> code itself). >>>>>> >>>>>>>> If people have different understandings, then we'll likely need to ask >>>>>>>> some >>>>>>>> support from Open source lawyers about this subject. >>>>>>> >>>>>>> My very little opinion is that waving GPL is way to the hell. Nobody >>>>>>> told me >>>>>>> why similar technologies, in different kernel parts are acceptable, >>>>>>> but not here. >>>>>> >>>>>> If you want to do the networking code at userspace, why do you need a >>>>>> kernel >>>>>> driver after all? The proper solution is to write an userspace library >>>>>> for that, >>>>>> and either enclose such library inside the applications, or use >>>>>> LD_PRELOAD to >>>>>> bind the library to handle the open/close/ioctl glibc calls. libv4l does >>>>>> that. >>>>>> As it proofed to be a good library, now almost all V4L applications are >>>>>> using >>>>>> it. >>>>> >>>>> LD_PELOAD is out of bussiness for normal work. It is technique for >>>>> development >>>>> and/or debugging. >>>> >>>> Well, libv4l successfully uses LD_PRELOAD in order to support all >>>> applications >>>> that weren't ported to it yet. It offers two ways: >>>> 1) you can use it as a normal library; >>>> 2) you can use it with LD_PRELOAD. >>>> >>>> >>>>> Library would be possible, but then you kill main advantage >>>>> - totally independece of changes inside userland DVB applications. >>>> >>>> Why? if you write a "dvb_open", "dvb_ioctl", ... methods with the same >>>> syntax of >>>> glibc open, ioctl, ..., the efforts to migrate an userspace application to >>>> use it >>>> is to just run: >>>> sed s,open,dvb_open,g >>>> sed s,ioctl,dvb_ioctl,g >>>> >>>> >>>> The library and the application will be completely independent. >>> >>> How do you transparently set up the network parameters? By using >>> environment variables? How do you pass existing sockets to the library? >>> How do you intercept an open() that won't ever happen, because no >>> virtual device to be opened exists? >> >> Sorry, but I failed to see at the vtunerc driver anything network-related. >> Also, the picture shows that it is just acting as a proxy to an userspace >> code >> that it is actually handling the network conversion. The complete solution >> seems to have a kernel driver and an userspace client/daemon. >> >> Technically, doing such proxy in kernel is not a good idea, due to several >> reasons: >> >> 1) The proxy code and the userspace network client will need to be tightly >> coupled: >> if you add a new feature at the proxy, the same feature will need to be >> supported by >> the userspace daemon; >> >> 2) Data will need to be using copy_from_user/copy_to_user for every data >> access; >> >> 3) There's no good reason to write such code inside kernelspace. >> >> On a library based approach, what you'll have, instead is a library. The same >> userspace client/daemon will be needed. However, as both can be shipped >> together >> (the library proxy code and the userspace client/daemon), there are several >> advantages, like: >> >> 1) The library and the userspace client will be in sync: there's no need to >> check >> for version differences at the api, or providing any sort of backport >> support; >> >> 2) There's no need to recompile the kernel when someone wants to use the >> proxy; >> >> 3) The userspace won't be bound to the Kernel release schedule: When the >> code is >> stable enough, both libraries and userspace can be released at the same time. > > If you are (for first time!) inside technical discussion, please > answer my already > asked questions why it is done in other kernel sybsystems and nobody > needs to complain against it. I can refresh you similarities I have found > already - USBIP (http://usbip.sourceforge.net/) and NBD > (http://nbd.sourceforge.net/)?
Currently, I can't tell you anything about those two projects, as I'm not aware of them. I'll seek for some time to take a look on them. Mauro -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html