I'm thrilled. The MS tooling is really, really good and the only thing stopping me from committing to the stack fully has been it's lack of open sourceness (vendor lock in is still feasible but getting less of an issue).
Edit: Pardon the fanboyism but I've tried a set of feasible Non-MS language options for my particular domain and F# in Visual Studio beats for me, my particular use case and coding style Scala, Clojure, Ruby, Python, Haskell, "browser technologies"...
Kind of ironic, what with Ballmer's "Developers developers developers..." spiel.
"Developers,developers,developer" = Fuck developers,need more profits next quarter.
"We brought peace and democracy to country <X>" = We seriously fucked it up for years to come, and installed a brutal puppet dictator.
"We are not evil like those other mean companies. We will do good in the world" = The main products are the users, who's information it sells it its real users. Have colaborated and been in bed with corrupt governments all across the world.
The list goes on. It is a rather fun heuristic. And once you know about, you'll start seeing it more often.
So I can return to my code, which I've completely forgotten how it works, see that it compiles, read it through, and continue working. Noticeably: I do not need to care about the tooling because it just works. I don't get a shiteload of weird exceptions when I run my code (looking at you, Clojure - yes, I'm a noob) and since the Pythonic and mutable nature of F# allows me to write code in the way I enjoy the most it feels like a glove. There are a few oddities occasionally and some bits are a bit more verbose than in other languages (Clojures collections spoil any other language) but the overall experience is that I can focus only on my code. For me, it's a pain free computational substrate, and free as in beer now that Visual Studio community edition is out.
My progress is really slow but always worthwhile.
If you are interested I found Jon Harrops "Visual F# 2010 for Technical Computing" really good practical introduction, Don Syme et. alls "Expert F#" a good reference book on writing general stuff in the .Net ecosystem with F#, Petricek's "Real-World Functional Programming" a very good introduction to various application patterns and Sestoft's "Programming Language Concepts" a great book and online reference on writing interpreters and compilers (http://www.itu.dk/people/sestoft/plc/).
*At work I use C++ on MS stack.
It's not like Linux because there isn't a team of experienced volunteers already working on the code base and the Windows code base contains a lot functionality for business reasons that Torvalds has been in a position to not just say "no" but to add "and go fuck yourself."
But this is strictly imaginary because I doubt that 20 million lines of code are all under the unilateral control of Microsoft.
The beauty of open source model is it gives the desperately motivated the means to fix their problems in a way that benefits everyone.
[Ed: as for 20mloc -- the opened parts of .net is already at 5mloc...
Also, love seeing stuff like this from tfa:
git clone https://...corefxlab
cd ...corefxlab\...HelloWorld
nuget restore
msbuild
.\bin\Debug\HelloWorld.exe
]Point being, the most common reason companies give for not releasing source for a project is that they have code from contractors that they aren't able to release. That shouldn't be the case with Windows.
There are probably some parts that won't make it like Pinball [old new thing] but it shouldn't be significant at all.
>> Hey everybody asking that the source code be released: The source code was licensed from another company. If you want the source code, you have to go ask them.
[old new thing] blogs.msdn.com/b/oldnewthing/archive/2012/12/18/10378851.aspx
I seriously doubt piracy of Windows is a huge concern in most markets; MS will still be making a lot of money from Dell, HP, Lenovo, et al selling their stuff.
You can see this by looking at their Office 365 strategy (iOS, Android release, online version push). Making Windows 10 free to 8 users, removing licensing fees for windows phones, making Visual Studio available for free. Making the ASP.NET vNext to run on Linux.
Instead, MS sees the growth in Azure. Whether they use Linux or Windows servers, MS can make money off of the enterprise/startup segment. Whether or not it is a sustainable strategy in the long run, we will see. But in the short term, at least for the "consumer" market, MS is giving up on Windows and it is moving its focus to Azure and the software that runs on top of Azure (Office, Sharepoint, Dev Services, XBox, Bing, etc).
The marketing strategy behind this is also interesting. Things are still labeled "Windows" to give the illusion that the "Windows" the end user gets on their new laptop is somehow "related" to the Windows in the cloud (Azure). Interesting strategy to make the "Windows" brand live for a little more at least..
Two, compatibility. Even if you fix a bug, it usually needs to be versioned in some way to avoid breaking apps that rely on the bug. OS code, once shipped, becomes feature. Fixes require a fair amount of due diligence besides just identifying the problem and the correct fix. The historical context of how the issue was introduced and how it has migrated to other branches needs to be understood by grepping through the source history graph. Suites of build verification tests, regression tests, integration tests, and unit tests need to pass. Although Microsoft has extensive infrastructure for buddy builds and integration staging, external parties won't. So at best they could suggest a fix to Microsoft to complete the due diligence on. But usually suggesting a fix is easy and vetting it is the grueling part.
Three, private forks of Windows seem like maintenance and compatibility nightmares. Fragmentation would likely disrupt windows update's ability to apply patches and keep the system secure. Windows' ability to run across so many devices is kept sane by keeping a relatively small, consistent trusted computing base. Merging together forked Windows repos is a disaster. The XBOX team forked Windows 8 for a few months and made some tweaks to get XBOX One out the door, and then some folks had the nasty job of having to try and consolidate the codebases against moving targets. No one has enough context or time to perform these kinds of merges individually, nor would ever volunteer to, so they need to be massive coordinated efforts between teams.
Four, variants. You're not going to want to deal with all the possible permutations of Windows SKUs, processor architectures (ARM/X86/AMD64/IA64), build flavors, etc.
Five, it's a mess. There's plenty of archaic cruft, possible trade secrets, and lurking vulnerabilities. Open sourcing everything would be like opening Pandora's Box. It's too risky. Curating out some portion of this to open-source would be a massive undertaking and ongoing maintenance cost.
I think it makes more sense to take more mature modules, like .NET core or Roslyn, and open source them as separate entities. Modules are more reusable, and community-driven changes are easier to curate when they can be isolated. Windows has some components which it probably makes sense to open-source, but the entity as a whole is too unwieldy in its current form. .NET is designed more modularly.
TL;DR - Windows is an unwieldy behemoth and would be difficult to open source.
Are foreign governments a big market that Microsoft has lost a lot of customers from? I don't think so. The vast majority of the potential market for Windows is already running Windows, so I don't see what they'd really have to gain. The small but loud minority of open-source zealots won't be happy until every single Microsoft product is open.
I think this goes back to one of the core tenets of free and/or open source software: the user should be able to know, control, and modify exactly what their machine is doing.
If the source is not available you're just running a black box and praying that it will do what the person who gave it to you claims it will do.
They would fork it, but that is not why.
There aren't many people who have bought MS software for years and are now excited to use a fork or their own build. Even assuming that some other mega corp comes along and offers world class support/service and their own fork, it still probably wouldn't hurt MS much.
Most small companies would have released their code as GPL (versus MIT as the case here) to limit the risk of a fork fragmenting everything (not being able to merge forks back in or make everything compatible). But in Microsoft's case, because of their size, few companies could hope to make a better version than MS. Further, MS makes money in lots of ways and this isn't a zero-sum game for them. They'll profit immensely from a more open ecosystem. Companies such as IBM, Apple, Google, and Oracle already have proven it's possible to be profitable with open source.
You're forgetting that a lot of people traditionally haven't liked Microsoft because their software wasn't/isn't open. Yeah, Windows would still be a steaming pile of bovine manure regardless of which license it was made available under, but the availability of that source code would make it easy for better, Unix-like operating systems to pick up the necessary pieces to support Windows software, thus continuing to allow Microsoft to profit on their non-operating-system software (Office, SQL Server, Exchange, IIS, Internet Explorer^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^HSpartan, etc.) regardless of whether or not Windows itself is widespread in usage.
But it's fairly easy to determine what their strategy is, given that they've been open sourcing most things that touches Azure. Azure also hosts Linux Servers and given the world is moving towards hosting on Linux, they're following the trend to stay relevant and appeal to more developers.
Basically this comes down to making the .NET ecosystem more appealing and attracting more developers to Microsoft platform and development tools which will integrate seamlessly with their Azure hosting services and other commercial server products.
Is it though? I would believe that the people using the community edition are the same people that were previously using the express edition, i.e. hobbyists and students who were not going to pay for it anyhow. And as you already described in your last paragraphs: if their plan works out, I would imagine visual studio license revenues to go up in the long term as more people are attracted to the eco-system.
I don't pretend to understand the calculus of the decision, just offering this point you may have overlooked.
Prices for cloud servers are falling, so do they really plan to take part to a race to the bottom? I remember this discussion from November https://news.ycombinator.com/item?id=8582096
No, they can code in Linux using Vim if they want.
That was Sun's strategy for Java; it didn't work out well for them. Java became huge, but Sun never did figure out how to make a dollar from it.
Making ASP.NET Linux deployable ensures that Windows stays in the hands of developers. Making Azure Linux friendly ensures that Microsoft can take a slice of that market. And pushing Universal Apps and giving Visual Studio Community and Windows 10, an OS that allows Universal Apps to run on the desktop, for free motivates developers to fill up the app store.
This decision was inevitable and IMHO a huge step in the right direction.
About the .NET on Linux move, so the strategy could be to make more people willing to develop with .NET, bet that they buy VisualStudio, which means Windows desktop licenses and be prepared to see Windows Server replaced by Linux instances running (hopefully for them) on Azure. For that to work they must be bold in selling Azure and luring developers to the .NET stack. I don't foresee developers leaving their 5/10 years investment on other stacks en masse. Maybe new developers will consider .NET as a viable alternative to all the other open source tecnologies. It's a generational gamble and it's going to pay only if they really can compete against AWS and the other VM providers.
However I understand that they must do something, or they'll end up as the company that makes a console and an OS for video gamers and for cheap computers.
IMO, open sourcing Visual Studio itself is not all that interesting vs. open sourcing the .NET platform.
[1]: http://instagram.com/p/yqQe0bK3Bq/ [2]: felix.rieseberg@microsoft.com
https://github.com/dotnet/coreclr/blob/master/src/mscorlib/s...
[1]: https://github.com/munificent/wren/blob/master/src/wren_valu...
[2]: https://github.com/dotnet/coreclr/blob/master/src/mscorlib/s...
// We want to ensure we can change our hash function daily.
// This is perfectly fine as long as you don't persist the
// value from GetHashCode to disk or count on String A
// hashing before string B. Those are bugs in your code.
hash1 ^= ThisAssembly.DailyBuildNumber;
I'd love to hear the story behind this one :D
The idea is that the hash is good enough for normal list, but it's not a cryptographic hash and it's easy to find collisions. Then you can make a lot of requests with strings that has the same hash value. Now the hash operations are O(N) instead of O(~1) and everything is slower.
Using an unpredictable hash calculation makes this attack more difficult.
http://referencesource.microsoft.com/#mscorlib/system/string...
IE: Environment.GetResourceString("ArgumentOutOfRange_Index")
The string there is in multiple areas of that class, and the same behavior is displayed for all of them. Wouldn't logic suggest everything such as above would be moved in to a constant repository for clarity and also less potential human error for future additions?
http://grepcode.com/file/repository.grepcode.com/java/root/j...
It's sort of surprising to me how much huger the .NET version is, in terms of code. Virtually all the lines in the Java version are API docs. The .NET version doesn't seem to have them (they must be elsewhere?) but it does have a lot more code and that code is much lower level.
Not sure what that means, if anything, but it's interesting.
https://github.com/dotnet/coreclr/commit/90ef39bc3c9886e7967...
"This change fixes a potential problem in unwinding on Linux"
Today, .NET Core builds and runs on Windows. We will be adding Linux and Mac implementations of platform-specific components over the next few months. We already have some Linux-specific code in .NET Core, but we’re really just getting started on our ports. We wanted to open up the code first, so that we could all enjoy the cross-platform journey from the outset.
"You can 'watch' the repo to see Linux and Mac support being added over the next few months."
All the groundwork was done by Ballmer. It had to be because now that he and Gates have reduced their ownership stake and are no longer the two largest shareholders, Wall Street's flavor of the month ideas cannot be ignored.
The 'new' Microsoft has been building at least since they hired Hanselman back around 2008. He was talking then on his podcast about taking the job to advocate open source. Even then Microsoft worked with the Mono team. They moved Office to an open file format.
It takes a long time to change an aircraft carrier's course. This is Ballmer's strategic vision. His passion for developers even made it onto Youtube.
Or rather: When OpenDocument was standardized by ISO and threatened to create demand for open, common, standardized interchange formats, they created a similarly and confusingly named XML version of their existing format, with insufficient documentation to allow complete third-party implementations, and pushed it as a competing ISO standard, using tricks such as (accidentally, I believe they said) encouraging partner companies to join standards bodies just for the vote: http://en.wikipedia.org/wiki/Swedish_Standards_Institute#The...
If it's possible to transpile either Java source or better Java class files to a CLR assembly, even some of the community momentum that Java has might turn into a benefit for .NET, too.
Regarding .NET, it is likely it will benefit Microsoft significantly. First, because Microsoft would not do it without strong reasons. Second, we can guess at those reasons: Microsoft wants to grow its developer ecosystem. .NET has been limited due to being Windows-focused. Opening it up makes sense.
(Yes, Mono exists, but the .NET cross-platform experience still wasn't good enough. Not necessarily Mono's fault, but regardless, opening .NET can solve this (possibly at a cost to Mono).)
But in this context you seem to imply that there are practical differences i.e: Not all Open Source licences are considered Free Software in the practical sense.
If that is the case, could you provide an example?
For instance, this licence: http://opensource.org/licenses/AFL-3.0
It provide free usage, studying, display, publishing, but also explicitly says that some of the part could be binaries (machine-readable), you can't sell anything derivative, and the licence is personal with no right to give the licence to anyone else.
So, you can consult and modify in the frame of your academical work, but no more.
But in this context you seem to imply that there are practical differences i.e: Not all Open Source licences are considered Free Software in the practical sense.
The Open Source Initiative (OSI) was certifying all sorts of licenses as "open source" under their definition. Basically if you allowed people to see your source code it was considered open source. That's not really practical and most open source licenses had an agenda of the company retaining control, which means people can't really do what they want. To most developers there are basically the BSD/MIT licenses that allow you to do whatever you want, and the GPL/LGPL licenses that allow you to do what ever you want - so long as you pass that freedom on to your users. These are both forms of Free Software, though the distinction causes much argument. Every other "open source" license is generally more restrictive and meant for someone to retain ultimate control, including the old Microsoft licenses.
In my opinion the OSI did more harm to the movement than good by "certifying" a huge number of irrelevant licenses so companies could claim be doing the cool new thing. None of that code can be integrated into anything else under different terms - at least not without consulting a lawyer.
[0] http://www.gnu.org/philosophy/open-source-misses-the-point.h...
https://github.com/dotnet/coreclr/blob/master/build.cmd#L140
https://github.com/dotnet/coreclr/blob/master/build.cmd#L159
I guess this explains why they saw no need to fix the somewhat broken SLN file-format in the first place, but actually did something about project-files. They don't share their customers pain on this point.
[1] http://www.theregister.co.uk/2015/01/15/codeplex_repository_...
As a social-networking website, the most important thing that defines it is the number of users. You could publish your code on Codeplex or Bitbucket, but you would be simply limiting your reach.
Additionally, if you don't truly plan on enforcing many requirements of the license (e.g., if a distributor fails to "cause any modified files to carry prominent notices stating that You changed the files" (4.b.), will you send them a letter telling them to correct the problem?), then why bother using a license that includes those requirements?
I suppose this is important to Mono guys as mono is GPL AFAIK.
Now one of the guys pushing it, is CEO of Microsoft and we are finally seeing a (real) difference.. I joined the MS community a long time ago and this is (again) a heart warming addition!
Good job Microsoft, you're a bit late to the party. But no doubt, the ROI will show sooner or later! ;-)
Note: You'll need a terminal account to boot it, but it only takes 10 seconds to come online once you do that.
Since it's very easy to decompile .NET binaries and Windows has been a traditional place for crackers and what not, I think that code base is very well inspected already.
I would recommend something like Eto.Forms (https://github.com/picoe/Eto) which is an abstraction over native GUI toolkits (WPF, WinForms, GTK+, Cocoa)
Works really well and mature.
One of the projects I am currently working on, a greenfield application, requires WindowsForms for reasons I cannot expose here.
Would be great if MS open-sourced WinForms as well so we could fill in the gaps.
C++ tooling is behind its time (CMake, no dependency management) and JS approach seems kludgy right now.
Java was pretty close (JDK .. or NetBeans, support packaging to Windows or Mac AppStore) but the UI component for OSX is not pleasing and would be nice if it can produce something for Ubuntu/Redhat at least (don't care Arch or the rest at the moment).
Basically I want something better than what Oracle Java has to offer today :)
PS: I would require a great IDE, unit-testing/automation-testing, good scriptable build (Maven/Gradle style, not Ant/NAnt/MSBuild).
Although there are skins that can make it look native on each platform, I didn't bother with this for my app. Trying to match native on a cross platform app is a fools errand. A few months after you ship your app, the OS developers will decide to reskin everything and anything not using their native toolkit will look out of place. So my app takes its inspiration from Twitter Bootstrap and just doesn't even try to look native. You can skin JavaFX with CSS so it's quite easy to match the look, at least in some ways. Nobody has complained and quite a few people said the app looks great. I would definitely do this again for my future apps. Pick a nice design that isn't native to any platform in particular, and people won't hate you for it.
BTW Java now comes with a packager tool that makes self contained native installers which don't depend on the user having Java installed. Deployment is a lot more practical these days.
I guess it's no surprise that microsoft software has a human-edited source file that's over 35000 lines...
IIRC, it was originally machine-generated... from LISP code written by David Bacon, under contract from the then-GC owner Patrick Dussud.
Because it's a gargantuan 1193.581 kb.
Has anyone heard or seen whether MSFT is planning to support this?