> Personally I feel that the code exists to > serve a need, not to be pure and pretty.
And that is exactly the difference between us. You're an engineer, I'm an architect. You want things to work, I want them to be perfect. You want everything done as soon as possible; I'm willing to wait a few weeks for a better solution. Ultimately, we need each other. Without me, you'd live in a world where everything's a hack. Without you, I'd live in a world with nothing in it:)
> If you need it both ways, you're going to have to hack it one way
If you need it both ways, then you're probably confusing the model with its view. The solution is to factor the model into a third way and make the other two ways view it. That way it stops being a hack and becomes a feature. You let data be data and the presentation be a weird special case that happens in only one place. If anyone asks, blame it on the spec. Naturally, for more details you'd have to be more specific.
At this point I would also point out an exception to this rule, and that is if your application framework forces a hack on you. If you use a third-party application, as most people do, you know that everyone who doesn't work at your company is a complete idiot and couldn't see a good design if he was hit on the head with it;) In this case, there is often no recourse other than a lengthy comment. I've written a few of them in my time, concerning the Win32 API, if you know what I mean:)
Funny you should ask that. In the real world, I seem to do little but rewrite bad designs into good ones. When I see a situation such as the one you described I don't write a comment; I go to whoever is responsible for it and work with them to rip it out and make the design right instead. If that person no longer exists for some reason, I rip it out myself. I consider this to be a good thing, and my boss usually agrees because he can see how it benefits the product.
> Now what am I supposed to do wiseguy?
Ok, so maybe you just don't have time right now to redesign your database. Maybe the product is shipping in a week and there is no way in hell you can implement anything sane in that timeframe. What you should do is write the comment, but in such a way as to make it absolutely clear that what you are doing is a hack. Then, when your crunch time is over, fix it!
// Explicitly count the root node which is not // actually present in the database. // \todo Redesign the database to include a dummy root node to replace this hack.
If you don't do this, it becomes a permanent hack that needs to be documented everywhere. Whenever you add new code you'd have to include comments just like it about how the design sucks and you've got to do it this way. And the generations of programmers who have to maintain your code will forever curse your name for not correcting the design and causing them thousands of hours of pain when one of them is not told that the root node doesn't exist and has to spend a weekend debugging some unexplicable problem.
> Maybe sometimes I need it included and sometimes I don't.
Like this one. When I hear a statement like this I instantly know your design is bad. It tells me you have an unnecessary special case that everyone needs to know about. I don't even have to look at your code. I know. In a good design there are no ambiguities. Just put the damn node in the database! I bet it would take you less time than it took you to write all those special case comments I know you have all over the place.
// the total doesn't count the root node of the tree // (since there's no actual entry in the DB for node "0"), // so we just add that in here... ++ total;
I wouldn't call it a good comment. I would call it bad design. If you have to explicitly ignore the root node here, you probably have code elsewhere that needs to do the same thing. It's a breeding ground for bugs. Just put the damn node into the database. It's not like you've only got 64k to work with...
You wouldn't need so many comments if you named your variables right. You name your variable 'tmp' and then use it first as a holder for the last update time, and then for the interval. Why? Don't you know that the compiler is perfectly capable of reusing a register? Then you assign current time to last update when you still need the old value. Add a variable and you no longer need tmp and the code becomes much clearer than your comments made it. The code becomes a comment, and that is exactly the result you should strive for in all code. I only have one strategic comment in my version, but even that should be unnecessary if you placed the code into a function named something like update_fps_statistics.
So, who wants to be the first to give us a list of all those wonderful inventions that would have never been invented if it wasn't for the copyright law?
> maybe all people - lack proper understanding of the open source dynamics.
Bullshit. You don't get developers because most people just don't give a damn about your project. They might use it 'cause it's free, but write code for it? Forget it! It's much more fun to start your own project than to contribute to somebody's godawful mess.
> Sun is still the largest contributor to the > project with some 50 developers in Germany, > followed by Novell with about 10 contributors, > and only four active community developers. [italics mine]
This gives you an idea what degree of community support an OSS project can expect. Ought to be quite a shock for those who think that they can attract hordes of developers just by opening the source.
Do you find yourself frequently clicking on advertising banners? Is your house full of useless items you bought for no good reason? Do you believe yourself especially vulnerable to online advertising? Are you tired of being stupid? Get protection! We, at brainpills.com, have the solutions for all your problems! Instant results are guaranteed! Double your IQ in just minutes with our trademark brain pills made of all-natural ingredients! Gain the power to instantly recognize frauds, determine what you need to buy and what you don't, and save thousands of dollars by avoiding overpriced products! Take control of your life NOW! Come to brainpills.com and buy our product for the low-low-low-low marked-down blowout-sale price of $99.95! Click now!
> Sometimes this support takes the form of binary or wrapped > drivers, but that hasn't prevented Linux from remaining under the GPL.
Binary drivers are technically a violation of the GPL because they link into a GPL executable. Such linking normally requires all involved components to be GPL. Fortunately, Linus is not objecting much to this, so Linux is doing just fine. If Linux were being developed by Richard Stallman, however, it wouldn't have lasted a day.
> EULAs insist that you cannot use the software without accepting them.
The same is true of the GPL. If you don't accept the license, you can't use the software. The GPL just places fewer conditions on you. Just as a Microsoft License violator loses the rights to use Microsoft Office, so does the GPL violator loses the rights granted by the GPL.
> If you don't accept the agreement, you are not > allowed to click the button that says "I Agree." > That takes away a right, because normally you > have the right to click a button on your own computer.
LOL! This is hilarious!:)
Well, normally you have the "right" to put code you find on your computer into your own programs and sell it. If you accept the GPL, you lose that "right". Yup. Give a ridiculous example and I'll give you a ridiculous counter-example:)
But on a less ridiculous note: you normally have the right to distribute your own code under any license you choose. If you accept the GPL and put some GPL code into your program, you lose that right. Now, that is not very funny any more. And is the reason why I would never use GPL code for anything.
> It is fine to use the software without accepting the GPL.
No it isn't. GPL software is a copyrighted work and you have no right to use it unless granted a license to do so. GPL is such a license. If you do not accept the GPL, you have no license at all, and therefore can not use the software.
Software piracy is an example of this: if you pirate a copy of Microsoft Office, but do not give it to anyone else, is it legal? The law says it is not, because Microsoft Office is a copyrighted work and you have no license for it. You must purchase (and accept) the license in order to use the product.
For someone who "knows the differences very intimately", you are surprizingly ignorant of the linking issue.
> Perhaps you're confused.
Where am I confused? I am simply pointing out that under GPL, linking creates a derivative work, hence making GPL a viral license. The LGPL explicitly removes the linking clause and is therefore not a viral license.
> I guess the fault lies with the FSF then, and their training of their cousul.
The fault does indeed lie with the FSF and their misguided communist philosophy. The GPL is simply its application to software production. It is the goal of the GPL to force all commercial software to become GPL by infection. It is a goal frequently stated, especially by Richard Stallman. See the "GPL over LGPL" advocacy article that I linked to in my previous posts, for example.
If the present viral clause does not stand up in court, they can always create another one and put it into GPL v3. The very existence of the LGPL is the evidence that the viral property is greatly desired by the GPL camp. If it weren't, the LGPL linking exception would have been a part of GPL.
Of course, one of these days the GPL camp will wake up and realize that their plan is flawed. Nobody forces companies to use GPL code, and so they don't. Who in their right mind would give away their software for free when it could have brought them millions of dollars in revenue? To convert from a software development company to a tech support company? No thank you! And so we have the GPL camp and we have everybody else, each with their own code base, with no sharing between the two. Nevertheless, the GPL camp is screaming about how the world is adopting the GPL, even thought the truth is simply that people are using GPL software more because it's free. It's pretty funny, really.
> If you borrow a piece of GPL code, and CHANGE > NOTHING in the GPL code, it just plugs directly > into your product, you don't have to release your > entire product as GPL.
Richard Stallman disagrees. I can also refer you to the FSF GPL FAQ and what it has to say on the subject. This very scenario was the reason to create the LGPL in the first place. If linking didn't infect, the GPL and the LGPL would be the same thing.
> I don't need or want your entire product, only > the part that you've added TO MY CODE.
Then you should use the LGPL license, not the GPL.
> I haven't yet heard of a single case where an author of > GPL code forced a company to release their entire product
Only because any company that tries to use GPL code is forced by a court to remove it instead. Releasing the entire product under the GPL is an option; it is just never taken. Mostly though, companies just don't touch any GPL code at all.
> So please, get off the "viral" rant, its getting old, and > its just propagating more misinformation that simply isn't true.
If you read the LGPL and the reasons for creating it, you'd understand that the "viral rant" really is true. Your mistake is simply in not knowing the difference between GPL and LGPL. Look it up. What you think of as GPL really is the LGPL.
They are round trips and over a modem line that's a pretty significant delay. Now consider that I visit the very same sites day after day and that their IP addresses almost never change. Running a caching nameserver speeded up browsing considerably, and if I could set it up to just keep the addresses until told otherwise, it would have been very nice indeed. Sadly, bind does not save its DNS cache anywhere and it was a major pet peeve with me, since I don't want to run my computer twenty four hours a day.
> to release the source code to derivitive works > based upon GPL software, i.e. the code you > incorporated into your proprietary product. You > don't have to GPL the entire product at all
Most products don't contain a multitude of independent binaries; they usually have one executable and perhaps a couple of shared libraries. Word processors, games, and database engines all are pretty much like that.
Now say a single module, in a shared library, uses some GPL code. That module is then required to be GPL, since it is by definition a derivative work. The main executable must then also become GPL because of the FSF's interpretation of linking as making a derivative work (which probably won't hold up in court, but that's another story). Then all the other shared libraries loaded by this executable become GPL through the same linking clause. At this point the entire product is GPL. Care to point out where I am mistaken?
> If you borrow a socket interface from a GPL > product and put it into your application, does > your entire application become a derivitive work > of that socket interface? Of course not!
Yes it does. See paragraph 0 of the GPL, which defines a derivative work as "a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language." Perhaps you didn't read the GPL yourself then?
> Even the COPYING file in the Linux kernel (though LGPL)
The Linux kernel is a modified GPL. Did you read the COPYING file in your tree? It has a preface by Linus, which explicitly exempts userspace programs from the license.
Now, LGPL is a completely different beast from the GPL, exactly because it lacks the "viral" property. An LGPL library containing a socket interface would be perfectly legal to link into a proprietary application. glibc is a fine example of this.
There is some doubt whether the linking constitutes a derivative work under copyright law. If it does not, then the GPL loses its viral property and becomes equivalent to the LGPL. Unfortunately, nobody has bother to get the situation resolved. Until it is resolved, it is unlikely that any business (except the ones like RedHat, that just provide services) would touch GPL code.
> Remember, the GPL is simply a license that allows > you to copy and redistribute copyrighted software. > It grants rights, it does not take them away.
The same can be said about Microsoft's EULA: if you don't accept it, you don't have any right to use their software at all! Imagine that! The only difference is that Microsoft sells the licenses. I am sure Microsoft would be happy to give you the additional rights to copy and redistribute Windows. For the right price, of course. So you can keep your platitudes to yourself.
> Again, at no point does YOUR PRODUCT somehow become GPL code.
True, but the consequences you describe are a direct result of refusing to make the product GPL. You use GPL - you get infected. The cure is either to GPL the entire product or pay a fine and surgically remove all GPL code.
> It just doesn't happen, ever.
Also correct. The GPL is a disease, but an easily avoidable disease - just don't use any GPL code. I don't see why people consider this a problem. The issue is only brought up by the GPL fanatics who want the entire world to be under their precious license. When that happens, there is absolutely no need to argue. If you write the code, you can license it in any way you wish, and when the GPL camp comes begging at your door, all you need to do is say 'no' and leave them to their whining.
According to the Bush administration, North Korea has not yet proven it has nukes, beyond a reasonable doubt. Due process is such a convenient thing sometimes!
> What do we call dupes from other sites without credit?
I don't read OSNews and I couldn't care less who submitted the article. What is this ridiculous obsession with "credit"? Give me the information, I don't care who wrote it, who submitted it, or who found it in the first place. All I care about is what the article says. People don't matter, only results do.
> I don't know what planet you are on my friend.
;)
:)
;) In this case, there is often no recourse other than a lengthy comment. I've written a few of them in my time, concerning the Win32 API, if you know what I mean :)
We call it Earth, what do you call yours?
> Personally I feel that the code exists to
> serve a need, not to be pure and pretty.
And that is exactly the difference between us. You're an engineer, I'm an architect. You want things to work, I want them to be perfect. You want everything done as soon as possible; I'm willing to wait a few weeks for a better solution. Ultimately, we need each other. Without me, you'd live in a world where everything's a hack. Without you, I'd live in a world with nothing in it
> If you need it both ways, you're going to have to hack it one way
If you need it both ways, then you're probably confusing the model with its view. The solution is to factor the model into a third way and make the other two ways view it. That way it stops being a hack and becomes a feature. You let data be data and the presentation be a weird special case that happens in only one place. If anyone asks, blame it on the spec. Naturally, for more details you'd have to be more specific.
At this point I would also point out an exception to this rule, and that is if your application framework forces a hack on you. If you use a third-party application, as most people do, you know that everyone who doesn't work at your company is a complete idiot and couldn't see a good design if he was hit on the head with it
Funny you should ask that. In the real world, I seem to do little but rewrite bad designs into good ones. When I see a situation such as the one you described I don't write a comment; I go to whoever is responsible for it and work with them to rip it out and make the design right instead. If that person no longer exists for some reason, I rip it out myself. I consider this to be a good thing, and my boss usually agrees because he can see how it benefits the product.
> Now what am I supposed to do wiseguy?
Ok, so maybe you just don't have time right now to redesign your database. Maybe the product is shipping in a week and there is no way in hell you can implement anything sane in that timeframe. What you should do is write the comment, but in such a way as to make it absolutely clear that what you are doing is a hack. Then, when your crunch time is over, fix it! If you don't do this, it becomes a permanent hack that needs to be documented everywhere. Whenever you add new code you'd have to include comments just like it about how the design sucks and you've got to do it this way. And the generations of programmers who have to maintain your code will forever curse your name for not correcting the design and causing them thousands of hours of pain when one of them is not told that the root node doesn't exist and has to spend a weekend debugging some unexplicable problem.
> Maybe sometimes I need it included and sometimes I don't.
Like this one. When I hear a statement like this I instantly know your design is bad. It tells me you have an unnecessary special case that everyone needs to know about. I don't even have to look at your code. I know. In a good design there are no ambiguities. Just put the damn node in the database! I bet it would take you less time than it took you to write all those special case comments I know you have all over the place.
> people who want to indent with spaces need their heads examined
And so do people who change the tab size to anything other than 8. Tabs are sacred people! The computer is not a typewriter.
> since it started cheating on me and got a virus :-(
Maybe it got it from those porn sites you keep dragging it to...
So, who wants to be the first to give us a list of all those wonderful inventions that would have never been invented if it wasn't for the copyright law?
And remember: whatever you do, do NOT cut the red wire!
> maybe all people - lack proper understanding of the open source dynamics.
Bullshit. You don't get developers because most people just don't give a damn about your project. They might use it 'cause it's free, but write code for it? Forget it! It's much more fun to start your own project than to contribute to somebody's godawful mess.
> How long will I have to struggle with it to figure out how to turn that off?
About as long as it takes you to download TweakUI and turn off autoplay on the paranoia tab.
> used the mostly forgotten "help" tool. ... what
> really counts as reverse engineering anyway?"
So, reading the fine manual is now considered reverse engineering... And therefore illegal! Now I can sue anyone who tells me to RTFM!
> Sun is still the largest contributor to the
> project with some 50 developers in Germany,
> followed by Novell with about 10 contributors,
> and only four active community developers. [italics mine]
This gives you an idea what degree of community support an OSS project can expect. Ought to be quite a shock for those who think that they can attract hordes of developers just by opening the source.
Do you find yourself frequently clicking on advertising banners? Is your house full of useless items you bought for no good reason? Do you believe yourself especially vulnerable to online advertising? Are you tired of being stupid? Get protection! We, at brainpills.com, have the solutions for all your problems! Instant results are guaranteed! Double your IQ in just minutes with our trademark brain pills made of all-natural ingredients! Gain the power to instantly recognize frauds, determine what you need to buy and what you don't, and save thousands of dollars by avoiding overpriced products! Take control of your life NOW! Come to brainpills.com and buy our product for the low-low-low-low marked-down blowout-sale price of $99.95! Click now!
> Sometimes this support takes the form of binary or wrapped
> drivers, but that hasn't prevented Linux from remaining under the GPL.
Binary drivers are technically a violation of the GPL because they link into a GPL executable. Such linking normally requires all involved components to be GPL. Fortunately, Linus is not objecting much to this, so Linux is doing just fine. If Linux were being developed by Richard Stallman, however, it wouldn't have lasted a day.
> EULAs insist that you cannot use the software without accepting them.
:)
:)
The same is true of the GPL. If you don't accept the license, you can't use the software. The GPL just places fewer conditions on you. Just as a Microsoft License violator loses the rights to use Microsoft Office, so does the GPL violator loses the rights granted by the GPL.
> If you don't accept the agreement, you are not
> allowed to click the button that says "I Agree."
> That takes away a right, because normally you
> have the right to click a button on your own computer.
LOL! This is hilarious!
Well, normally you have the "right" to put code you find on your computer into your own programs and sell it. If you accept the GPL, you lose that "right". Yup. Give a ridiculous example and I'll give you a ridiculous counter-example
But on a less ridiculous note: you normally have the right to distribute your own code under any license you choose. If you accept the GPL and put some GPL code into your program, you lose that right. Now, that is not very funny any more. And is the reason why I would never use GPL code for anything.
> It is fine to use the software without accepting the GPL.
No it isn't. GPL software is a copyrighted work and you have no right to use it unless granted a license to do so. GPL is such a license. If you do not accept the GPL, you have no license at all, and therefore can not use the software.
Software piracy is an example of this: if you pirate a copy of Microsoft Office, but do not give it to anyone else, is it legal? The law says it is not, because Microsoft Office is a copyrighted work and you have no license for it. You must purchase (and accept) the license in order to use the product.
> I know the differences very intimately
For someone who "knows the differences very intimately", you are surprizingly ignorant of the linking issue.
> Perhaps you're confused.
Where am I confused? I am simply pointing out that under GPL, linking creates a derivative work, hence making GPL a viral license. The LGPL explicitly removes the linking clause and is therefore not a viral license.
> I guess the fault lies with the FSF then, and their training of their cousul.
The fault does indeed lie with the FSF and their misguided communist philosophy. The GPL is simply its application to software production. It is the goal of the GPL to force all commercial software to become GPL by infection. It is a goal frequently stated, especially by Richard Stallman. See the "GPL over LGPL" advocacy article that I linked to in my previous posts, for example.
If the present viral clause does not stand up in court, they can always create another one and put it into GPL v3. The very existence of the LGPL is the evidence that the viral property is greatly desired by the GPL camp. If it weren't, the LGPL linking exception would have been a part of GPL.
Of course, one of these days the GPL camp will wake up and realize that their plan is flawed. Nobody forces companies to use GPL code, and so they don't. Who in their right mind would give away their software for free when it could have brought them millions of dollars in revenue? To convert from a software development company to a tech support company? No thank you! And so we have the GPL camp and we have everybody else, each with their own code base, with no sharing between the two. Nevertheless, the GPL camp is screaming about how the world is adopting the GPL, even thought the truth is simply that people are using GPL software more because it's free. It's pretty funny, really.
> If you borrow a piece of GPL code, and CHANGE
> NOTHING in the GPL code, it just plugs directly
> into your product, you don't have to release your
> entire product as GPL.
Richard Stallman disagrees. I can also refer you to the FSF GPL FAQ and what it has to say on the subject. This very scenario was the reason to create the LGPL in the first place. If linking didn't infect, the GPL and the LGPL would be the same thing.
> I don't need or want your entire product, only
> the part that you've added TO MY CODE.
Then you should use the LGPL license, not the GPL.
> I haven't yet heard of a single case where an author of
> GPL code forced a company to release their entire product
Only because any company that tries to use GPL code is forced by a court to remove it instead. Releasing the entire product under the GPL is an option; it is just never taken. Mostly though, companies just don't touch any GPL code at all.
> So please, get off the "viral" rant, its getting old, and
> its just propagating more misinformation that simply isn't true.
If you read the LGPL and the reasons for creating it, you'd understand that the "viral rant" really is true. Your mistake is simply in not knowing the difference between GPL and LGPL. Look it up. What you think of as GPL really is the LGPL.
> DNS queries are figgin tiny...
They are round trips and over a modem line that's a pretty significant delay. Now consider that I visit the very same sites day after day and that their IP addresses almost never change. Running a caching nameserver speeded up browsing considerably, and if I could set it up to just keep the addresses until told otherwise, it would have been very nice indeed. Sadly, bind does not save its DNS cache anywhere and it was a major pet peeve with me, since I don't want to run my computer twenty four hours a day.
> to release the source code to derivitive works
> based upon GPL software, i.e. the code you
> incorporated into your proprietary product. You
> don't have to GPL the entire product at all
Most products don't contain a multitude of independent binaries; they usually have one executable and perhaps a couple of shared libraries. Word processors, games, and database engines all are pretty much like that.
Now say a single module, in a shared library, uses some GPL code. That module is then required to be GPL, since it is by definition a derivative work. The main executable must then also become GPL because of the FSF's interpretation of linking as making a derivative work (which probably won't hold up in court, but that's another story). Then all the other shared libraries loaded by this executable become GPL through the same linking clause. At this point the entire product is GPL. Care to point out where I am mistaken?
> If you borrow a socket interface from a GPL
> product and put it into your application, does
> your entire application become a derivitive work
> of that socket interface? Of course not!
Yes it does. See paragraph 0 of the GPL, which defines a derivative work as "a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language." Perhaps you didn't read the GPL yourself then?
> Even the COPYING file in the Linux kernel (though LGPL)
The Linux kernel is a modified GPL. Did you read the COPYING file in your tree? It has a preface by Linus, which explicitly exempts userspace programs from the license.
Now, LGPL is a completely different beast from the GPL, exactly because it lacks the "viral" property. An LGPL library containing a socket interface would be perfectly legal to link into a proprietary application. glibc is a fine example of this.
There is some doubt whether the linking constitutes a derivative work under copyright law. If it does not, then the GPL loses its viral property and becomes equivalent to the LGPL. Unfortunately, nobody has bother to get the situation resolved. Until it is resolved, it is unlikely that any business (except the ones like RedHat, that just provide services) would touch GPL code.
> Remember, the GPL is simply a license that allows
> you to copy and redistribute copyrighted software.
> It grants rights, it does not take them away.
The same can be said about Microsoft's EULA: if you don't accept it, you don't have any right to use their software at all! Imagine that! The only difference is that Microsoft sells the licenses. I am sure Microsoft would be happy to give you the additional rights to copy and redistribute Windows. For the right price, of course. So you can keep your platitudes to yourself.
> Again, at no point does YOUR PRODUCT somehow become GPL code.
True, but the consequences you describe are a direct result of refusing to make the product GPL. You use GPL - you get infected. The cure is either to GPL the entire product or pay a fine and surgically remove all GPL code.
> It just doesn't happen, ever.
Also correct. The GPL is a disease, but an easily avoidable disease - just don't use any GPL code. I don't see why people consider this a problem. The issue is only brought up by the GPL fanatics who want the entire world to be under their precious license. When that happens, there is absolutely no need to argue. If you write the code, you can license it in any way you wish, and when the GPL camp comes begging at your door, all you need to do is say 'no' and leave them to their whining.
> A nutjob with nukes isn't nearly as scary
According to the Bush administration, North Korea has not yet proven it has nukes, beyond a reasonable doubt. Due process is such a convenient thing sometimes!
> With tabs, we can all set our editors to use the
> amount of visual space that is most pleasing to us.
Oh, the horror! Thou shalt not mess with the holy 8-space tabs! It's heresy!
Does anyone know why the FP hardware rounds to the nearest even integer? It seems like a rather strange standard to adopt.
> What do we call dupes from other sites without credit?
I don't read OSNews and I couldn't care less who submitted the article. What is this ridiculous obsession with "credit"? Give me the information, I don't care who wrote it, who submitted it, or who found it in the first place. All I care about is what the article says. People don't matter, only results do.