On software bloat…
December 16th, 20095
On software bloat…
December 16th, 20095

This morning I decided to install Visual Studio 2010 on one of my development VMs. I have several processes in our production environment where, for convenience, I have SQL Server Agent calling batch files that call C# command line programs, VBScript files, etc. Some of these programs simply BULK INSERT log files into tables, or parse them and then insert selective and sometimes adjusted data into tables. I've finally conceded that maybe Adam Machanic is right, and that I should be using CLR for a lot more than I'm using it for now (RegEx pretty much sums it up).

I fired up the Visual Studio installer. I initially downloaded Ultimate from MSDN because I wasn't sure which features I'd ultimately need (no pun intended); in this case, it turns out that Pro would have been good enough. However, I didn't want to go and download a different edition, because that would have set me back a couple of hours. So I stepped through setup and chose these options (remember what I chose here, because this will come up in a minute):

What I chose

Nothing crazy, actually very minimal. C#. That's all I need. After clicking "Install," the monstrosity before me was absolutely jaw-dropping. Maybe I haven't paid attention when installing Visual Studio 2005 or 2008, but on virtual machines I guess I've become hyper-sensitive to how much stuff gets installed, since I'm usually dealing with limited disk space on a single drive. This is the sum of what is getting installed on my system:

What I ended up with

What is all this crap? Why do I not have the ability to opt out of things I know I will not be using, such as the sync framework, tools for Office runtime, tools for SQL Server Compact, and C++ runtimes? All I want to do is write C# command-line applications and assemblies, and I thought I made that choice pretty clear earlier in setup. Now my Add/Remove Programs Programs and Features applet looks like alphabet soup; I have 27 entries that start with "Microsoft Sync" or "Microsoft Visual" or "Visual Studio." I know disk space is cheap – salt is cheap too, but I'm not filling my cupboards with it, and I'm not dumping loads of it on each meal, either.

I also noticed a similar trend in SQL Server. Not so much with polluting my system with components I didn't realize I asked for, but forcing me to install parts that I know I don't need. In SQL Server 2008, when you install a clustered instance, you cannot decline Replication or Full-Text Search – though you *can* decline them for a stand-alone instance. What is the logic behind this? Apparently the only one my colleagues have come up with is, "installing those components after the engine is in place is hard." So what? And what if I fully intend to never install those components? I realize they're not really enabled unless you intentionally turn them on. But on that clustered instance, about half of the rows in sys.databases say is_fulltext_enabled = 1, and half of them say is_fulltext_enabled = 0. So what is the real story here?

Microsoft wonders why they have problems making different programs interact well with one another. Maybe if they stuck to a mantra of minimal instead of smorgasbord installs, this problem would only be present in cases where someone installing the software decides they should check every single box imaginable. I reserve the right to shoot myself in the foot, but I certainly don't expect you to do it for me by default. But it seems like that is what it has come to.

By: Aaron Bertrand

I am a passionate technologist with industry experience dating back to Classic ASP and SQL Server 6.5. I am a long-time Microsoft MVP, write at Simple Talk, SQLPerformance, and MSSQLTips, and have had the honor of speaking at more conferences than I can remember. In non-tech life, I am a husband, a father of two, a huge hockey and football fan, and my pronouns are he/him.

5 Responses

  1. Igor Levicki says:

    This is not the first time Microsoft disregards user input while prentending to give you a choice, I wrote about it years ago:

  2. AnonymousCoward says:

    Nitpicking a bit! My thoughts are that if the list had just one item in it, saying "Visual C#", you probably wouldn't have noticed.
    As Denis said, if you just want simple console apps, use Visual Studio Express. The clue is in the "Ultimate" bit.
    Mikhail: The "BULK INSERT" statement instructs MS SQL Server to pick up data directly from a specified file, which presumably benefits from certain optimisations. It is trivial to do this in .NET.
    Additionally ADO.NET 2.0 included SqlBulkCopy which sounds more like what you are talking about. This was released some time ago, before Linq anyway as far as I know.

  3. AaronBertrand says:

    Denis, of course some people will always need to be protected from themselves, and I understand that angle.  But then why offer any options at all?  Why not just make everything required?  Those same people who don't think they needed some sub-component might still be in the same boat when they realize they should have installed Visual Web Developer or the Crystal tools.
    For the rest of us, maybe provide a "minimal install" hidden in the advanced options of setup or something.  It's not even so much about disk space, just the frustration of (a) watching all of those things install when I know I'm never going to use them, (b) having to scroll through a big list of bloatware in Programs and Features, and (c) not understanding why things like SSMS need the J# runtime once Visual Studio is installed, but seemed to work fine without it beforehand.
    As for switching to PowerShell, sure, but one of the problems is we have several legacy command-line apps that require maintenance in the meantime, so I still need to have VS in the event I need to recompile one of them.  As much as everyone seems to love PowerShell I haven't quite grasped it as quickly as I should have, and it will take a lot longer than "grasp" before I will be able to swap out any of our apps (most of them are parsers, loaders or extractors).

  4. Denis Gobo says:

    I know where MS is coming from in this case. Anyone who installed Office 2000, took a laptop with him/her and then opened Office to do something far away from home…after you click on some toolbar you would get a message "please insert disc to install this feature"……No I left it at home
    The reason is that as a c# developer you can develop a whole lot of stuff not just console apps. If you do a MVC site you might use LINQ or EF, perhaps SQL Express (the default connectionstring in a new MVC project)  etc etc etc.
    Yes it would be nice to allow you to choose but for 99% of the people it would be harmful
    I uninstalled the j# runtime the other day…now SSMS is complaining about some assemblie it can't load….:-(
    The biggest bloat of Visual Studio is C++ that adds a whole bunch of stuff
    Aaron, if you are doing just console apps (And I don't believe they offer this in this beta) then the Express editions might be all you need
    Maybe time for Powershell> GUI (if you can call it that) comes with Win7 🙂

  5. Mikhail Opletayev says:

    A good example of a bad dependency management. A requires B that requires C and D, etc.
    On the side note: I am not sure .NET is such a great tool for bulk inserts as ADO.NET lacks any meaningful array interface support. I guess they were too busy designing LINQ and forgot to put something as unimportant as support for bulk inserts.
    Oracle eventually supported it on the side but by that time we had our own CLR->OCI mapper just for that.
    It's a bit frustrating that a lot of companies don't pay attention to such things anymore.