Archive for the ‘Uncategorized’ Category

Random thoughts about Sylph

March 4, 2015

Some random thoughts on Sylph: the programming language I want.

My own wishlist:

Build/configuration settings can be bad news.  I think this is mostly a problem for older, crusty compiled languages like C and C++, but there are interpreters that are just as bad (cough, PHP).  If we really can’t do without configuration settings, they should at least be standardized and located in the source code rather than something separate you have to know how to throw at each particular compiler or interpreter.

I’d like the same reasoning to apply to makefiles, too; rather than being something external, make them part of the language.  If some source only applies to certain platforms, that information can be in the source.

Java comes close in that all you have to tell the compiler is which source file to start with.  I’d like to get rid of even that, though, so that all you need to do is point the compiler or interpreter at the folder containing the source code, and let it take things from there.  I also don’t like that Java requires the source have a particular directory structure.  Ideally, the directory structure wouldn’t matter; heck, ideally you could append all of the source code files, in any order, into a single file and it would still have the same meaning.  Don’t know if that’s realistic.  I guess if a single build produces multiple applications, you’ll need to tell the interpreter which one to run – but if nothing else it could be a selection from a menu rather than a freeform guess.

I might prefer a family of languages, with certain properties in common and in particular the ability to mix them freely.  In particular a special language for database operations, probably not much like SQL – but the key idea here is that you can put the database statements right in the middle of a function written in a regular language, rather than having to build a string or mess about with parameterization functions.

I’m ambivalent about function overloading, but if I do have it, I want it to be very obvious to the programmer which function you’re calling at any given time.  In particular, if the types don’t match one of the overloads exactly, I want to have to convert them myself, not have the language guess what I meant.  Non-overloaded functions can still do automatic conversion where appropriate.

As for the cases where function overloading is all about converting types according to certain rules, e.g., x, y -> Point(x,y), it almost seems that what you want is for the function to describe how the compiler/interpreter should parse calls to it?  I’m not sure what that would look like, but it sounds as if it could be generalized into something very powerful.  (Perhaps too powerful.  Don’t want to get seduced by the Dark Side here.)  On the other hand, if someone can make something sensible out of this, the same mechanism might also be able to provide a much safer replacement for C macros.

On the third hand, if we stick to the original idea, it could be as simple as

void draw_point(p:Point or p:new Point(x:int, y:int), c:Color)


This one is implicit, I think, in some of the original post’s ideas, but it should be possible to include code in a program that runs at compile-time.  Static initializers would do it by default, but there should also be an explicit way of saying “this segment of code here?  run it now.”

Safety/Memory Management: I’m thinking by default you can’t get a pointer to a variable; only if has been declared in a way compatible with pointerhood.  Perhaps you have special container types that allow you to have pointers to objects inside them; the lifetime of the object, unless explicitly deleted, is the lifetime of the container.  Pointers to a deleted object automatically go null, or raise an exception if the pointer type doesn’t allow null.  Or something.  Maybe different container types have different rules – this one is reference counted, this one is explicit-delete only.  There should perhaps be an escape hatch.

Indentation: I’m not sure about getting rid of braces, perhaps because I’m old enough to think that sometimes I might have to type in code from a printed or handwritten page, image or the like, rather than always having access to the original source files and/or being able to copy and paste.  I would like the language to require that the braces and the indentation match up, though.  Perhaps that means an IDE could just not show you the braces if you don’t want to see them?

Also, there are situations where even reading the code might be awkward.  If you’re six or seven indentations deep, and then drop out of several at once, it might not be clear.  “Was that the end of three blocks or four?  Which of the blocks two pages up lines up?”

Classes: if you’re willing to require complete source code (or a source-equivalent, like bytecode) then instead of using inheritance to modify the behaviour of a type, you could have a language construct that says “hey, make me a new type with all the same code as the old type, except for these changes”.  Fragile if the upstream code changes, of course, but no more so than inheritance.  Plus, from the compiler’s view the two types are unrelated, making everything simpler.

Traits: similarly, you can eliminate dispatch complications if the compiler can generate as many copies of a function, with different types, as it decides it needs.

Exceptions: for the simplest cases, how about something like

value = some_dict[key] or default_value

… although that assumes there’s only one kind of (acceptable) failure, and the function knows what it is.  It also doesn’t deal with your example where you want to add the key if it doesn’t exist, though I suppose that might just be

value = some_dict[key] or (some_dict[key] = default_value)

so long as you’re happy about assignment being an operator.  That could also be implemented much more efficiently than a real exception, it’s just a hidden extra return value.

Operator precedence: except for a (relatively) few common, well-understood cases, just don’t have any precedence; require the programmer to use brackets.  That does mean the compiler would have to know which operators were associative, though; I don’t want to have to say (a+b)+c or a+(b+c) unless they’re actually different.  (But if they are different, then I do want the compiler to remind me of the fact by forcing me to include the parenthesis.)


Typically, when using threading for I/O, you don’t really need the “threads” to run simultaneously.  Give them a different name (fibers, perhaps, ala Windows) and have them run one at a time, switching between them only when they do a wait; that makes it a lot easier to reason about thread safety.

You’d still have to separate out the I/O code from the ordinary code, though.  Also, it would be nice if fibers didn’t need their own stacks, but that means the code has to be very flat; basically any time you want to call an async function the compiler has to be able to inline it.  That might be too restrictive, though I think it’s worth a try.

The “Python problem” can be solved by having both threads and fibers.  Fibers would be for I/O and similar tasks, and could share memory ownership; threads would be for concurrent processing, and no shared memory except via safe functions (and escape hatches, I guess).  Still doesn’t solve all the problems.

Standard library: some of these problems will go away if the compiler has source code for the standard library (apart from the native primitives, I guess) and has good support for trimming away unused code.  You still need some kind of versioning.

Optimization: speaking of trimming away unused code, that’s another case where functions need to be able to define their syntax and/or where some of the code needs to run at compile time.  So that if you’re using a function analogous to printf, it can work out at compile time that you aren’t using the floating-point bits and throw them away.  (Well, provided the format string is a constant, but that seems like a reasonable constraint.)

You could something like that along the lines of preprocessor directives, except that it’s per-invocation:

do_stuff(x:int, fred:option, greg:option):
  if option fred
    # do fred stuff
  if option greg
    # do greg stuff

and then if you ever call do_stuff(x, fred) the compiler includes the version of do_stuff with the fred option in the executable, and if you don’t it doesn’t.

That’s all I got.

Same-Sex Marriage and the Electric Car

October 24, 2014

This was originally posted in the commentary to this post by Ilya SominIt has been expanded slightly.

Not very long ago all cars had internal combustion engines. If you asked someone to define a car, they might well have said something like, “a passenger vehicle using an internal combustion engine”. The engine was part of the concept of a car.

Then someone was inconsiderate enough to design a car-like vehicle that didn’t have an internal combustion engine; it had an electric motor instead. Clearly not a car by the traditional definition, so we would expect that it would be given a new name: we might call it a “civil vehicle”, perhaps, if you’ll forgive the snarkiness. (“Wireless tram” would be a more neutral option, if you would prefer it.)

But we didn’t. We recognized pretty much immediately that, while this vehicle was different from the cars we were used to, the differences weren’t really relevant: the new vehicle was, to all intents and purposes, just a different *kind* of car. It wasn’t necessary to give it a new name, or to make new road rules for it. Our conception, our *definition* of what it meant for something to be a car changed seamlessly.

In 1950, the idea of an electric car would sound outlandish; I would anticipate amusing comments about the length of power cords.  Now it seems normal, and it would be surprising to find someone who refused to accept that an electric car was, in fact, a car.

That’s pretty much how SSM feels, I think, to most people that have no objections to homosexuality per se. I’m 46 years old; when I was growing up, it was widely accepted that marriage was between a man and a woman, and I accepted that without ever thinking about it. Then, around 2004, SSM became a political issue. I *still* didn’t need to think about it, or not much: once the idea was presented to me, I recognized instantly that it was just another kind of marriage, just as I recognized instantly that an electric car was just another kind of car.

(We didn’t get SSM right away, of course; the religious community was too strong at the time, and we would up with civil unions as a sort of compromise.  SSM was legalized in New Zealand 19 August, 2013.)

At any rate, including SSM under my definition of marriage wasn’t and isn’t a “strategy”. It has quite simply always seemed obviously correct, and I struggle to understand why anyone would disagree.  This sometimes leads me to assume that opponents have hidden motives, presumably either religious or prejudiced (or perhaps just a general opposition to any sort of social change) though I should probably avoid jumping to that conclusion.  There may well be some atheist, unprejudiced opposition to SSM, and the fact that I can’t recall seeing any off the top of my head isn’t particularly significant; it probably wouldn’t be particularly visible above the general noise level. 🙂


Whateverize is always a word

August 24, 2014

Stack Exchange is well-known for producing the occasional true work of art, in addition to the more pedestrian (but often useful) content that is its more stable fare.  This answer by Tom Christiansen is one of them:

Yes, of course versionize is a “real word” — and no disparaging remarks about its parentage should be made in polite company.

This is because ‑ize is a productive suffix in English that’s used to produce a new verb from various nouns and adjectives. That means that any word derived by combining an existing one of those using ‑ize is automatically also a “real word”.

This remains true under all conditions:

  • The result is still a “real word” even if you cannot find that word in any dictionary howsoever complete, abstruse, current, or hip said dictionary should happen to be.
  • The result is still a “real word” even if Google despite its omniscience cannot find that word anywhere.
  • The result is still a “real word” even if nobody but nobody in the entire world has ever before used that word. […]

Read the full answer on English Language & Usage Stack Exchange.

This post is licensed under the cc-wiki license as per Stack Exchange’s content licensing terms.


Is a process running as SYSTEM running in kernel mode?

August 5, 2014

[This answer rescued from this closed Stack Overflow question.]

No. The system process is a special case, but all other processes are run in user mode, even if they are running in SYSTEM context.

Each user-mode process has its own address space. The kernel has a separate address space, accessible only to kernel-mode code. Most threads in a user-mode process run in both user mode (when running code from the process) and kernel mode (when running code from the kernel).

A thread may enter kernel mode as the result of a call to a Windows API function, or because of an external event: when a device driver needs to process an interrupt or DPC, the code runs in the context of whichever thread happens to be active at the time. This avoids the overhead of a context switch, but means that such code has to be able to run in an arbitrary context.

(Kernel-mode code can bypass the security model, but has to be careful not to leak this access out to the user-mode process that it is running in. For example, if kernel-mode code running in the context of an arbitrary thread opens a handle, it has to mark it as a kernel-only handle; otherwise, the user mode process could gain access to it.)

The System process is a special case; its threads run only in kernel mode. This allows device drivers and the kernel to do background processing that is not directly in response to an external event. It is also possible for a device driver to create a kernel-mode thread in a user-mode process.

Although they are still running in user-mode, processes running as SYSTEM are given privileges that are not (in the default configuration) given to processes running in an administrative context. For example, they have SeTcbPrivilege (“act as part of the operating system”) which allows them to do things like using SetTokenInformation to change the Remote Desktop session associated with a security token.

Fictitious Charges Don’t Cause Torque: Mansuripur’s Paradox

February 3, 2013

There’s been some talk lately about Mansuripur’s Paradox, e.g., see Slashdot.

For those not interested in the fine detail, there’s a very simple explanation as to why there isn’t any real paradox involved.  I’m not sure whether the debate is significant for electrical engineers; it may well be true, as Mansuripur suggests, that the Einstein-Laub equations are more appropriate than the Lorentz law for the purposes of electrical engineering.  (I have no opinion on that question.)  What should be pointed out, though, is that from a fundamental physics point of view there’s really nothing at all to see here.  (I believe that Mansuripur understands this [1], but I’m not at all sure that the journalists do!)

Let’s start with a quote from one of the articles (it looks like the paper is a bit more subtle, but the upshot is might be [2] the same): “Now imagine how things look from a “moving frame of reference” in which the charge and magnet both glide by at a steady speed. Thanks to the weird effects of relativity, the magnet appears to have more positive charge on one side and more negative charge on the other.”

Now, it’s true that there’s an electric field, and for some purposes it may be convenient to imagine that this is due to charges on either side of the magnet. But these charges are fictitious. They aren’t really there, as can be easily shown by observing that charge is a scalar, and hence the charge distribution in the magnet cannot be dependent on the frame of reference. Since they aren’t there, it’s hardly surprising that the external electric field doesn’t apply a force to them.

So, basically, a fiction that happens to be convenient in electric engineering is incompatible with relativity; or, if you prefer, in order to make fictitious charges compatible with relativity you also have to either have fictitious angular momentum, or modify the Lorentz force law.  As far as fundamental physics is concerned, this is not a paradox.


[1] I may be wrong about this; see comments to my question on Stack Exchange.

[2] The comments and linked question also suggest that I might have misunderstood the source of the supposed torque in the original paper.  There’s still nothing indicating any evidence of a real paradox.  I’ll update again if I learn anything new.

Is POLi safe?

December 28, 2012

Short answer: No.

Long answer: Hell, no.

BNZ (link here) and ASB (link here) have both recently reported that POLi have been spoofing their respective internet banking sites in order to process payments, meaning that banking passwords, any other applicable authentication information, and private banking information have been passing through POLi’s servers when POLi is used.

The banks have warned customers not to use POLi, although BNZ seems to be sending some mixed messages.

Looking at POLi’s terms and conditions there are some major warning signs.  The disclaimer of liability is probably unavoidable (though still not acceptable IMO; see below) but terms like “You will not monitor or alter the execution of POLi™ using tools external to POLi™” are neither.  They want us to trust that their software is safe to use, but they don’t want anyone to check on what it’s actually doing?  Yeah, right.

The POLi client is basically, from what I can gather, a special-purpose web browser.  While that limits exposure to security bugs, it doesn’t eliminate it, so it is also worrying that I can’t find any security bug reports either on major third party sites such as Secunia or on POLi’s own web site.  There should be at least the occasional report that “someone found a bug and we’ve fixed it” and the absence of these suggests that it really hasn’t had enough attention from the white hats.  The alternative is that POLi have figured out a way to write software without bugs; that’s basically the Holy Grail of modern computing, and if they had the secret of perfect software they’d all be fabulously wealthy and retired on private Hawaiian islands by now!

The real killer, though, is POLi’s own response to these claims (PDF).  Most importantly, the part where they deny that “POLi is spoofing/mirroring the ASB website” and claim that, instead, “POLi is providing a pass through service whereby the bank sites are accessed via our secure servers.”

Uh, hello?  Those two sentences mean the exact same thing.

POLi say they aren’t capturing customer’s authentication or other private information.  Well, good for them.  But they could.  Their software allows them to do it.  (It pretty much has to; otherwise there would be no way for the merchant to know they had been paid.)  That means it also allows anyone who manages to hack into their servers to do it.  This article on ZDNet lists some of the companies whose secure systems were breached this year: Symantec, Zappos, Stratfor, Global Payments, LinkedIn, Yahoo – even the Chinese Government, for heaven’s sake.  Are POLi really so arrogant in the light of all this that they think their security is impenetrable?

Well, of course, they probably don’t think that.  They just want us to.

They also offer to let the banks audit the software.  Kind of pointless, really; since the software allows POLi’s servers to spoof the banking sites (oh, sorry, “provide a pass through service”) it has failed any credible audit in advance.  Any audit of the servers themselves would be good only on the day it was performed, at best.

I’m also amused by POLi’s claim on their web site (link here) that “Your confidential information is not disclosed to any third party, including us!” which I can only assume is based on a creative definition of the word “us” which excludes their servers.  True enough, the information probably doesn’t leave their secure servers and is probably deleted as soon as the transaction is complete, but that doesn’t mean that it isn’t being “disclosed” to “us” – not by any reasonable definition of those two words, at any rate.

They also say that “POLi checks the bank website’s SSL certificate and thumbprints to always ensure you are talking directly to your bank.”  So which is it, exactly?  Directly to your bank like the FAQ says or via a pass-through service like the announcement says?  These are mutually exclusive possibilities, so it has to be one or the other, and either way I’m not exactly filled with confidence.

Besides, in practical terms it doesn’t matter how good POLi’s security is.  Yours isn’t [1] because today’s consumer operating systems are still based on old designs which did not have security in mind.  If your computer becomes infected a hacker could easily modify the POLi client to behave maliciously.

Of course, said hacker could also modify your web browser to behave maliciously.  The difference is that if that happens, BNZ, at least, will cover your losses.  It isn’t clear that they will if POLi is involved, and POLi definitely won’t.

Until and unless your bank makes a public statement that they will cover POLi-related losses, don’t use it.  Just don’t.  Uninstall the client if you have it installed.  Ask your merchant to provide an alternative, or, if applicable, choose a different merchant. For example, both Ascent and Mighty Ape NZ [2] accept internet banking payments without needing any special client software, although granted you then have to wait for the payment to go through before they will ship the goods.

A small price to pay, I think.


[1] To minimize your risks, make sure you use a standard user account (not an admin account) for your everyday activities, and use a different standard user account for your internet banking (and nothing else).  Better still, get a live DVD (a DVD which you can boot to, containing a simple operating system) and use that for internet banking.  This doesn’t change anything I’ve written here.  Both of these approaches are much better than nothing, but neither is foolproof.

[2] I have no association with either company except as a satisfied customer.

Stallman on Jobs

October 11, 2011

I’ve just read this article about a blog entry Richard Stallman recently posted on the subject of Steve Jobs’ sad death.  Leaving aside Mr. Stallman’s social gaffe, I just have one thing to add, on the subject of Mr. Jobs’ so-called “malign influence” on computing:

Pot.  Kettle.  Black.

United Airlines replaces flight manuals with iPads

August 25, 2011

See this article from the New Zealand Herald.

Flight manual on an iPad

(Original picture courtesy Evan-Amos, Wikimedia Commons.)

Freedom Software

August 19, 2011

OK, now that I’ve outed myself as anti-GPL, I guess I may as well go ahead and publish my rant on the phrase “free software”. I guess I’ve got no more credibility to lose as far as the FSF goes anyway.

The phrase “free software” has exactly one correct grammatical meaning, and guess what, it isn’t the one the Free Software Foundation keeps on pushing.

Software can of course be free as in “costing nothing”.  [All definitions are from NZ Pocket OED, 1988.]

Can it be free as in “power of acting without constraint of necessity or fate”?  No.  [1]

Can it be free as in “not a slave”?  Well, only in the trivial sense [1] that no software is a slave, since the word only applies to people.

Can it be free as in “not under the control of another [other than the software itself]”?  Again, no. [1]

Well, I don’t want to go through the entire list of definitions (it takes up an entire column) but you get the idea.  Some of the definitions can be applied to software, such as “available to all” but they don’t match the meaning of “free software” as defined by the FSF either.

And of course using the phrase “free software” with the FSF’s meaning causes endless confusion with the (more correct) meaning of the word “free”.

So, what should we call GPL and other similarly licensed software?  My vote (so to speak) is for “freedom software”.  This isn’t exactly euphonious, but at least it isn’t confusing and it means what it says – software that supports freedom.  (Even if it seems to me to be an odd kind of freedom for people to worry about.)

The upshot is that I’ve decided to start using “freedom software” instead of “free software”.  I’m hoping it won’t be necessary to explain myself too often.  I invite you to join me. 🙂


[1] Except for an AI, I suppose, but that’s not really the point.

Well And Truly Told Off

August 19, 2011

See this comment by the moderator and founder of Groklaw.  Ouch.  The original post I was commenting on is here.

I really don’t think I was being silly.  I’m perhaps not incredibly well informed on the subject matter, but well enough (I’d have thought) to have a valid viewpoint.  I certainly wasn’t trolling – I hope those on the other sites/newsgroups I frequent would agree that while I may occasionally be lighthearted, I never argue dishonestly.

My feelings are hurt, to be honest.

I’ve suggested that my comments be removed, so I’m going to put them all here instead.  If anyone can explain to me how I might have presented my opinions less offensively, please feel free to comment.  These are not chronological but in thread order.

GPL Feature Creep
Authored by: Anonymous on Monday, August 15 2011 @ 07:03 PM EDT
FWIW, GPL “feature creep” is a genuine concern for some of us.

… first they came for the kernel plugins, and I didn’t speak out because I don’t write kernel plugins. Then they came for the WordPress extensions, and I didn’t speak out because I don’t write WordPress extensions. Then they came for the apps and there was noone left to speak out for me … 🙂

Explaining the analogy
Authored by: Anonymous on Tuesday, August 16 2011 @ 09:17 PM EDT
“Surely we all agree an app developer for Linux is _not_ bound to distribute under the GPL”

Maybe, but once upon a time is was widely agreed that a kernel plugin developer wasn’t bound to distribute under the GPL either. If the freedom software community has changed their minds about that, what will they change their minds about next year?

Another example is the way changes made in GPLv3 impacted TiVo. RMS wasn’t shy about admitting that this was deliberate. TiVo was following the license, but it got screwed over anyway. Personally if I was selling something based on open source software from a third party, I’d feel a lot safer with a BSD license.

Explaining the analogy
Authored by: Anonymous on Tuesday, August 16 2011 @ 09:54 PM EDT
Oh, by the way, I don’t *really* think anyone is ever going to claim that you’re not allowed to run non-GPL-compatible apps on a GPL operating system. I’m just exaggerating for effect. (On the other hand, if RMS could find a way to make that illegal, I’m sure he’d be keen to do so.)
Explaining the analogy
Authored by: Anonymous on Thursday, August 18 2011 @ 08:32 PM EDT
“And if I remember correctly from all the talking at the time, TiVo did something he *thought* the GPL already stopped them doing […]”

That’s fair enough from the FSF perspective, but from TiVo’s perspective, what they were doing was perfectly reasonable. Then the rules got changed from underneath them.

“[…] he’s not willing to compromise with people who start with unreasonable positions […]”

Ummm … thing is, from my POV, he’s the one taking an unreasonable (and irrational) position. And somehow (again from my POV) “infecting” lots and lots of other programmers with it … perhaps I’m wrong, and they’d have come up with the same idea themselves, but it smells to me of a cult of personality.

Anyway, we’re getting off topic. If you want to continue the discussion, feel free to visit my blog post on the same subject.

Tivo problem real, RMS strawman argument not so much
Authored by: Anonymous on Thursday, August 18 2011 @ 08:46 PM EDT
“I appreciate your explanation of the analogy, assuming the same Anonymous is involved on all posts.”

Yes, I just haven’t gotten around to creating an account. I can be found here.

“However I can’t understand what excuse you feel this gives for gratuitously bashing RMS,” […]

I didn’t think I was. His position seems clear enough: non-open-source software (and also Tivo-ized software) is evil and should be eliminated. If this seems like an exaggeration, I apologise, but that’s my best understanding of his beliefs.

“Tivo suffered no retroactive penalty, as you seem to complain.”

They’re no longer able to use the latest versions of any software that has migrated to GPLv3, including security updates. The impact of this is mitigated by the fact Linux itself hasn’t done so, although there remains the risk that it might do so in future. IIRC, TiVo was obliged to formally warn investors that GPLv3 presented a risk to their business, although I don’t know whether there was any actual loss to stock value.

“You are free to use (or license) BSD software as you wish.”

And I would encourage businesses to do so. That’s all I’m saying.

“clever minds keeping the letter and not the spirit of the GPL.”

The problem is that the “spirit of the GPL” isn’t terribly clear to many of us. I for one wouldn’t have been able to guess in advance that anyone would object to what TiVo was doing.

And that explains alot
Authored by: Anonymous on Tuesday, August 16 2011 @ 09:29 PM EDT
“It is very interesting that some people are so afraid of the GPL, and yet no one is forcing them to use it (or even to use software that is covered by the GPL).”

The point is that we have (I think) legitimate concerns. No, we aren’t forced to use it, and my advice is not to do so for anything important.

“Frankly, it is none of their business.”

If we need to decide whether to use GPL code in a particular context, it is certainly our business to be aware of any issues it might cause.

“Ergo, they must simply want to rip off someone else’s code without contributing back.”

Personally, I would want people to contribute code for the good of mankind, rather than in order to promote what seems to me a rather odd philosophical viewpoint. Nobody is going to force you to do so, but if you do, please don’t get defensive if some people don’t want to use your code as a result.

Odd philosophical viewpoint…
Authored by: Anonymous on Thursday, August 18 2011 @ 08:49 PM EDT
Not to the best of my knowledge. Have you ever heard of a scientist complaining that a company used the knowledge in a scientific paper to build a product but didn’t distribute a copy of the paper along with the product?

(I think I’m missing your point.)

Odd philosophical viewpoint…
Authored by: Anonymous on Thursday, August 18 2011 @ 11:49 PM EDT
Seriously, I don’t see any connection or analogy between the copyleft philosophy and the philosophy of science. I’m not trying to be difficult, I just don’t get it. – Harry
Re: I don’t understand
Authored by: Anonymous on Tuesday, August 16 2011 @ 09:51 PM EDT
“It is very simple to negotiate a GPL license. Read the license, do it like they say, and bingo. You are good to go.”

The problem is that what you are or are not allowed to do seems to keep slowly changing over time. TiVo obeyed the license, but they got screwed over anyway by the changes in GPLv3. The folks developing kernel plugins and WordPress extensions didn’t think the GPL would require them to release source, but, well, copyright law is stranger than you might expect, so they got screwed over too.

BSD licensing, in contrast, seems to be easily understood and stable.

“I think it would be *somewhat* harder if you wanted to use a piece of Microsoft or Oracle or Apple Code.”

Sure, but they have a sensible reason to protect their code. The GPL requirements, from my perspective, are just selfishness. (Not my original point, and not worth discussing IMO, but since you mention it.)

“All you Anti-GPL shills want is to be able to STEAL the code. Like with BSD.”

Others have already pointed out that STEAL is a silly word to use in this context. But, in any case, I’m not suggesting that anyone should use GPL code without following the license. I’m suggesting that (where possible) folk should avoid using GPL code, in favour of BSD or similar licenses.

Personally, I would prefer that people used the BSD license instead of GPL when releasing their own code to the public, but nobody is going to force you to do so. It’s your choice. But please don’t get rude about it (“shill”???) when, as a result, some of us recommend against using your code.

Re: I don’t understand
Authored by: Anonymous on Thursday, August 18 2011 @ 09:00 PM EDT
“TiVo *gamed* the licence. They did something they *knew* to be against the spirit of the licence, ”

I disagree. They didn’t *understand* the spirit of the license, which is a quite different thing.

I for one would not have guessed in advance that anyone would object to TiVo’s approach, and keep in mind that many GPL developers (such as Linus) don’t.

“Recommending BSD over GPL is, from my perspective, just selfishness.”

I accept this as a fact, but cannot comprehend the thought processes that lead you to feel this way. Is my opinion equally opaque to you? (I think it is very similar to most BSD-license developers; I disapprove of duplication of effort, and BSD is the best way to avoid that.)

I think we’re getting off topic. Please feel free to go to my blog post on the subject if you want to continue a discussion with me, although I’ll also be checking in here for a few more days.

Re: I don’t understand
Authored by: Anonymous on Thursday, August 18 2011 @ 11:56 PM EDT
It seems to me that it is a lawyer’s job to understand the letter of a contract, not the spirit of it.

Of course, I don’t work for TiVo. I’ve never even owned one. So I certainly don’t know whether they were acting in bad faith or not – but it seems to me that you are jumping to the conclusion that they were, with no particular evidence, and I don’t understand why. – Harry