Script that filters SVN DIFF output, removing entries based on metadata or file names

I wrote a script that allows you to filter svn diff output to exclude changes based on metadata and file names (or anything else on the first line that can be greped).

I wrote it to remove all of the “properties” changes and filter out the output files, so all that was left was the code changes and a list of binary files that were modified.

Just pipe the output of svn diff to the script, after you set the parameters at the top of the script. I put the filters in the script instead of parameters because I always run the same filters.

It is released under the GPLv2 (the licensing details is longer than the script itself).

clean_svn_diff.bash

Why Mono is Good, even though it’s Evil…

Chris Smart has posted a very insightful blog titled, “Mono: An Infectious Disease“, that succinctly summarizes the case against Mono in Open Source. (Non-techies: not that Mono – this Mono.)

Given that Mono is now part of Debian’s default installation, I think the issue has moved from “ripe” for discussion, to “rotten and stinks to high heaven.”

The basic conclusion the anti-Mono crowd reaches (and if I am wrong, please let me know) is this: you shouldn’t use Mono, because Microsoft could come back later (after it has gained wide acceptance) and claim patent violations, gaining control (or at least significant influence) over open source software that uses it. They are especially vehemently opposed to using Mono for any core packages (or packages that gain widespread use), because that places Linux at considerable risk from Microsoft.

The pro-Mono crowd (for which I think this rant by Jo Shields is a fair representation, though if you have a better one please post) contend that Microsoft’s patents aren’t really a threat, they are perhaps unenforcible, and in any case, a patent-suit from Microsoft is against Microsoft’s best interests. I think the pro-Mono crowd is missing the point…

At the very least, Microsoft could use the threat of its patents and the “murkiness” of the issue to spread FearUncertaintyDoubt. At worst, Microsoft could sue major distributions, forcing them to sign patent-license agreements, and destroy (by sending a chill through) the open source movement at its core (even if Microsoft later withdrew its claims). Mono is evil, and to paraphrase Douglas Adams, Microsoft has shown it is not above such behavior “in the same way the sea is not above the clouds”.*

Killer Proprietary Apps

That said, I use Mono (sometimes). I like Mono, I think it is good technology, and I think Mono is essential because it helps solve the critical problem that Linux faces to gain wider and wider adoption – Killer Proprietary Apps (KPA’s). Killer Proprietary Apps are pieces of software that are closed source applications, that won’t run natively on Linux, and users won’t live without.

The largest problem most users face switching to Linux is no longer “usability”. Despite Linux’s reputation, I honestly believe (from observation) that Ubuntu/Gnome is easier to use than Windows and even Mac, different, but easier – the usability problem has been solved, or at least “solved to no longer be the problem”. The insurmountable barrier to adoption that most users cannot and will not overcome is killer proprietary apps that don’t run natively and easily on Linux. Microsoft Office, Apple’s iTunes (with DRM), Adobe Photoshop, Inuit Quicken, and World of Warcraft keep home users on Windows and Macs more than any other factor, even the fact that Windows came with their system and that they would have to install Linux themselves. If they must dual-boot (or run a virtual OS, or futz around with Wine), they’ll just stick to Windows thank you very much.

In that context, anything that makes it easier for companies to port proprietary applications to Linux, even to keep those apps proprietary and sell them, is a “good thing”. While Microsoft will never publish a Linux version of Office (unless coerced by the EU), Adobe, Inuit, and Blizzard would, if and only if they could make a profit on it. Since profit equals revenue minus costs, anything you can do to lower their costs is a win-win for Linux and Open Source, even if it means running proprietary, closed source applications on Linux. If the goal is wider adoption, Mono is good…fantastic…essential.

Business Users

Home users are just foreplay though, the real sex is in the workplace, with companies and programmers. If companies start using Desktop Linux (i.e., start forcing their employees to use it), it is my belief that Linux, being a superior product, will be “taken home” by those employees.

However, medium and large companies face four major remaining obstacles switching to Linux on the desktop:

  1. K.P.A. business software, especially industry-specific software.
  2. KillerInternalApps written for Windows.
  3. Human Capital invested in .NET that is not otherwise transferable to Linux.
  4. Lack of commodity IT people for Linux1.

Of those four, Mono can directly and drastically impact three. The fourth is simply a function of market-share (as Linux becomes more common, desktop-level IT people will begin appearing, trained on Ubuntu or Suse, and ready to help users turn off the CapsLock key when their password doesn’t work), and insomuch as Mono helps increase Linux market share, it helps there too.

If you think about all of that internal code floating around companies, much of it ancient with little to no documentation, written in .NET, it is clear that those companies face an enormous expense trying to migrate to Linux. An IT manager that prefers Linux, looking at the choice, is going to say, “well, when we retire the old system and move to a new application, then we can talk about switching platforms”.

But, the company acquires human capital to maintain those legacy systems, and those programmers are intimately familiar with .NET, so even if a company rewrites its entire application from scratch (instead of “evolving it” as tends to happen), the company is going to be sitting on programmers that know .NET, and are less familiar with Python or Java.

If a company is faced with large decreases in productivity while its programmers learn an entirely new platform, it will add the decrease in productivity to the “cost of migrating” side of the balance sheet, and decide that it is cheaper to stay with Windows.

Mono changes that, providing a way to both migrate existing .NET systems to Linux, and leverage existing human capital. Linux moves from “too expensive” to “the kind of cost reduction that will get me promoted”.

Programmers

Speaking of human capital, what about all of those hours Windows developers have spent learning .NET, and all of their .NET productivity? Will they listen if you tell them “sorry, all of your time, energy, and training are now sunk costs”? Of coarse not…those programmers will resit you even if you show them a superior technology/software methodology/way of thinking about software development, because, given their human capital investments, that technology/method/ideology is not superior to them.

But, with Mono, there is no longer this “leap” from Windows to Linux, or from “proprietary” to “open source”, now there are smaller steps. It lets .NET programmers become involved with open source (even tainted), and exposes them to new technologies and ways of thinking about software. Without Mono, these programmers will keep doing what many of them do now when you mention open source, stick their fingers in their ears and shout, “NO NO NO NO I CAN’T HEAR YOU!”.

Once you get them on Linux, they will learn other, “pure” languages simply because Linux is so inviting and conducive to learning – as they want to change little things in the operating system (and once they get hooked on APT and YUM), they will become Linux programmers, with human capital now invested in Open Technologies.

Conclusions

Commercial, proprietary software is not going anywhere, and neither are custom, internal-only applications. If these current applications can be ported to Linux using Mono, then we have drastically lowered the cost of Linux Migration. This is a “good” thing.

If Microsoft wants to extract “economic rents” from these users for using “their intellectual property,” I’m not happy, but I won’t get my panties in a twist over it… in my opinion, if you aren’t opening your code (or ideas) for others, you deserve to pay for others’ code (or ideas). If Microsoft tries to make these royalties prohibitive, the EU will drag them back to court before the first check clears. Yes Microsoft’s patent threats raise the cost of migration, but not nearly as much as Mono lowers it. Companies at the margin will stick with Microsoft, but many more will see cost-savings and switch.

As the anti-mono people are right to point out, you shouldn’t use Mono for new Open Source projects, especially core projects – the potential threat from Microsoft is just too large. But, remember that Microsoft’s power is market power first, and its political power is derived from that. Anything that reduces that market power should be seen as a “good thing.” Mono in the core of Linux distributions has the potential to endanger Linux, but used properly, Mono makes Linux viable for many more people, giving them more choice, and more choice is “good.”


1. Commodity IT people are those rank-and-file AS from community college that “majored” in MIS, and form the “bottom bulk” of “Microsoft Certified Whatever”…the ones you send downstairs when the “administrative assistant” to Ms Davis in marketing has a problem the printer…who have no interest in computers aside from World of Warcraft and would rather be running a bar. Companies rely on these people, liking the fact that they are cheap and easily replaceable. They are coming soon to an operating system near you…yeah…maybe replacing Microsoft is not such a great idea after all.