Thanks for the thorough pieces of information. I learned a few things, and with the stuff I didn't learn I agree on most. However, I'm going to disagree with your last paragraph.
I think a fundamental reason most modern websites are written in languages like Perl, PHP, Python, Ruby, or even Java is that those languages have a much faster compilation cycle than C or C++ for complex applications. Of course the scripting languages are compile-and-run in one fast step. For certain classes of applications where speed is essential, you can't escape the need for C or C++ or something similar. Otherwise, I think the speed of the change-save-run cycle trumps the speed of the execution in importance by a wide margin.
A company with a big war chest of money like Google, Microsoft, Oracle, or IBM can pick (or build) the compiler that lets their 100 servers serve the results as quickly as possible because they're battling costs associated with thousands of servers. But for some company that's looking at 50 servers, or 20, or 3, the company with the quicker compiler probably has his product on sale while the other company is twiddling its thumbs. Whenever I've had to stop what I'm doing to wait for something to finish at work, inevitably I switch from being productive to wasting my time doing something else (like, just for the sake of argument, posting to Slashdot).
In the 1970s we used to get high and talk about bellbottoms. "Man, when I get some money, I'm going to get the biggest bellbottoms in history, man! Homeless people are going to be living under my pants."
If, like me, you use your phone for telephone conversations, 5 inches for the display is outrageous.
If, on the other hand, you're like most smart phone users and you probably spend more time checking email, posting to Twitter, reading Facebook posts, and shopping on your smart phone then you spend using a laptop or desktop computer, then 5 inches is good and having an iPad-size "phone" would be better.
At the rate we're going, when kids today grow up they'll be known as "Generation Gollum" for all of the time they spend hunched over tiny screens. I purposely don't have anything personal on my phone except my contact list, because as a technology worker I have enough problems with back pain, neck pain, eye strain, and cramped wrists as it is.
I'm not sure what I think about this single use VM concept. I think it has a lot of advantages. But one benefit of running a full operating system (Linux, Windows, FreeBSD, or otherwise) in your virtual machine is that you can modify it while it's live. Unless I missed something, this one-application-per-vm model assumes you set it up and run it, and then when you want to make a change you create a new vm, kill the old one, and put the new one in its place.
Maybe kill-and-replace trumps modify-in-place in most circumstances.
I think I overstated my position. Let me back it off a little bit - I think it's helpful to know how to build at least a toy application with one or two dependencies from the command line, using a simple Makefile (or in the Java world, Ant, Maven, Gradle, etc...). You don't have to build your application with many thousands, or tens of thousands, or millions of lines of source code with dozens or hundreds of dependencies by hand.
But with that relatively modest amount of knowledge that lets you work on little projects outside the IDE, I think that common errors that occur in the IDE, at least in my experience, that are related to the build system are easier to understand and fix. It also makes switching IDEs less work, because you have more of the knowledge you need to translate the build settings between them based on what they do in raw terms.
I don't think the analogy to architecture holds. In my experience, the problem with automated tools that help with creating software is that sooner or later you run into a special case that requires working around the tool. I don't think that's generally true in other domains - the architect isn't going to design 98% of the building in CAD and then use Wordpad or a Hex Editor to work directly in the CAD files to finish the last 2%.
Maybe your experience is different. In the early 2000s I worked with Microsoft's Windows CE Platform Builder IDE, but there was some features of CE at the time that weren't available through the IDE and only available from command line builds. We had to figure out the steps to modify the make files by hand to get it to work, and suddenly it was really important to understand the steps in the process that the IDE had been doing for us. (CE Platform Builder got a lot better by 2005, but we were doing this work earlier.) In the Java world, a lot of the older web toolkits have these nice quick annotations or XML you can set up, and it will automatically generate Javascript validation or SQL or HTML for you. Except if you needed a Javascript validator, SQL query, or HTML that didn't fit what the toolkits supported, you either had to modify the source yourself or work around the toolkit. The people I worked with who only wanted to use Java would eventually hit a wall - they had no choice but to learn the 'raw' Javascript, SQL, or HTML to get the work done.
So why do I think you'll benefit by knowing how to manage the entire build of your C++ application outside an IDE? Because in my experience, sooner or later you're going to stumble over some special case where you have to do that anyway. You can learn it now, and then when that happens it will be easier to handle. Or you can wait until it happens.
For most people at most levels of skill, the clickety click menus in the IDE will let them do their work faster than Vim or Emacs. But if you're damn good with your Vim or Emacs, you can do all of your work - text editing, multi-file search, auto-complete, jump to definition, regular expression search, regular expression search and replace, jump between multiple buffers, delete, copy, and otherwise manipulate files on the filesystem, launch your application, run your unit tests, compile, etc... all without taking your hands away from the home row keys on the keyboard.
I'm definitely not that good with Vim or Emacs. But it's a fun goal to have. We may not realize it but constantly switching one hand from keyboard to mouse many hundreds of times per day has a productivity impact.
I don't know how common it is, but I've heard of a number of Emacs users that love Emacs for the full featured scripting and customization, but they do set it to Vi compatibility mode for the actual text editing.
I think an honest cost versus benefit analysis would lead a developer to pick a few tools like Vim, Emacs, or Visual Studio and spend a few weeks mastering the keystrokes so they can be blisteringly productive with it.
But in my real world experience, most people learn the basics to get their job done and don't bother to dig further. I use Vim all over the place, but I confess I just never bothered to memorize the keystrokes for multiple copy-paste buffers or multiple editing buffers, even though I'm absolutely certain both features would be immensely useful for me. That's specifically why I suggested making more games out of it.
I'm grateful for this discussion, it's renewed my resolve to make my Vim skills top notch.
Java is admittedly up with COBOL among the most verbose programming languages around. But even comparing C++ with Python, Perl, Ruby, Lisp, etc.... once your application gets beyond very basic complexity any of the others will let you accomplish the same tasks with far fewer lines of code and in many cases broader abstractions. So even in a C++ with IDE vs Perl with Emacs face-off, I'm not sure Intellisense makes C++ the winner.
Obviously if performance is critical then any other advantage of your scripting languages are irrelevant. I'm speaking of the common cases when the performance differences are irrelevant.
That's a fair point, but I would counter with two counter-points.
First, some languages have a REPL (the interactive Read Eval Print Loop), so if you're not sure how function X works, you can either call a documentation function on X in your REPL or invoke X directly and see what happens, and get information you want from any error messages. If you're unsure about some aspect of the invocation, you can experiment with different parameters directly in the REPL. C++ naturally doesn't support this, but many other languages do.
Secondly, some languages just lend themselves to less code, period, or other language features that reduce the amount you need to write. Sometimes when I'm writing Java I get the overwhelming feeling that Intelli-sense is helping me muddle more quickly through mountains of code that I wouldn't have to write in the first place if I was using Python, Perl, or Clojure (just to pick three other languages I like).
I'll take your word for it. ( No sarcasm intended. ) I've heard this repeatedly, but I haven't worked with C++ for a long time so I have no grounds for comparison.
To my knowledge, anything you can do in a traditional IDE can also be done in VIM and Emacs. However, the learning curve for doing it in VIM and Emacs is a lot steeper. It's hard to sell both individuals and companies on that. If I want a top and bottom split screen to compare two files in VIM, I know there's a few keystrokes to get me there but I don't remember what they are. IDEs provide that with a few clicks - slower than the VIM keystrokes if you have the VIM keystrokes memorized, much faster if you have to look them up. Likewise for multi-file grep, multi-file search and replace, auto-complete, jump-to-function-definition, jump-to-variable-declaration, etc...
Make a game out of learning VIM or Emacs, including the advanced features. Then maybe your average developer can become faster with them than an IDE. But without that, the learning curve to reach the point where you can use VIM or Emacs as fast or faster than you can use Visual Studio or Eclipse is just too long.
There are plugins to add Intelli-sense to Emacs and Vim, of course.
In my opinion - an opinion I am sure is popular on Slashdot - you need to know your programming language and basic build steps very well before you move to an IDE. An expert in Visual Studio can use Visual Studio quickly, but if Visual Studio does something he does not expect, or he has to work outside it for some reason, or he needs to develop for a platform that Visual Studio does not target, his productivity is shot to hell. An expert in C++ development from a text editor, console, and manually edited makefiles can learn to use Visual Studio quickly and will rapidly approach the Visual Studio expert for productivity, but if Visual Studio does something he does not expect, he can drop out and look at the underlying environment with ease. If he needs to switch to a C++ development chain outside Visual Studio, the transition is quick. And if someone comes out with an IDE that is equal or better than Visual Studio for his needs, he can switch quickly.
A more interesting discussion is languages that seem to thrive without IDEs, like Python, Lisp, or Perl. In those, I think the lack of an IDE is not a handicap - the language just lets you play with pretty complex abstractions with relatively few lines of code, so you don't need a nice tool putting in foo.getBar().getBaz().doQuux().parse("freeze").insert("qubits").add(42) for you. I work with Java, I can do all of my work from a console plus Vim, but I'm just so much faster in Eclipse or Netbeans. I play with Python and Lisp in my spare time, and in those I don't see how fancy developer tools can add as much value for either language.
Is Visual Studio really that awesome, or is it merely good but has raving fans because of sheer inertia (e.g. Visual Studio can do 5000 things and IDE X can do 5000 things just as quickly, but tens of thousands of developers already know how to do 3500 of those things in Visual Studio and don't feel like tackling the equivalent learning curve in IDE X.)
For IDEs that claim to be C++ friendly there is Eclipse, Netbeans, KDevelop, QT Creator, Code::Blocks, there must be others. Does Visual Studio really trump them all?
The problem is that they don't clearly define "server". If I use Bittorrent to download a Debian release, other downloaders are pulling the data from me. Will I be blocked? If I'm hosting a Minecraft server, will that be blocked? What about ownCloud, Tonido Plug, Gotomypc.com. Are they blocked? What if my home security system allows remote access, can I use that without violating my terms of service? What if I set up a simple S/FTP server for me and a few friends to access? I can understand an argument that I shouldn't run a node for newegg.com out of my basement, but I think Google should delineate more clearly between what kinds of home service are forbidden on a consumer plan - and if they really mean everything, it sucks.
And in terms of Evil, Google complained that they couldn't query public posts on Facebook while Bing can, but can Bing or anyone else query public posts on Google Plus? Of course not. Are they opening Google Plus APIs to third party app developers so users can cross-read and cross-post content and comments from other networks? Of course not. I strongly suspect that Google circa 2005 would have done differently. But now that they've settled further into their position as an juggernaut, they've started to take pages from the Microsoft play book.
I still trust Google more than I trust Microsoft. But the gap in credibility between the two companies is narrowing.
I understand how that would work if I took, say, FreeBSD and LLVM and made a virtual machine, and in the virtual machine I write some piece of code that runs on the FreeBSD and compiles with LLVM, but the code I wrote is itself GPL. Then the release has BSD license restrictions on the operating system and compiler bits, and GPL license restrictions on the code I write.
But if I modify the LLVM compiler, and release the modified version, I can make it part of proprietary software and still comply with the original BSD license. If I modify the LLVM compiler, and want to release the modified version GPL, then I have BSD license code calling into GPL license code, and GPL license code calling into BSD license code. As far as I can tell, that violates the terms of the GPL - all of the code it links with has to be GPL also.
As far as I can tell, that combination can't be done. I honestly don't think the BSD license creators were intentionally trying to sink the GPL with their licensing provisions, but the practical result is that the BSD license is more friendly to re-use in proprietary software than re-use in "copyleft" ( https://www.gnu.org/copyleft/copyleft.html ) software.
So I suppose if you want to make a "copyleft" fork of BSD license software, you would need to use something like the LGPL or the Eclipse Public License. Both of those require all redistribution of the software in source or binary form to include access to the source code of the LGPL or EPL license code and grant the recipient the right to redistribute that code in turn under the same license. But both do not place restrictions on other software that links with or otherwise interoperates with the LGPL or EPL code. But again, I have a very weak understanding of these things.
This is one of Slashdot's favorite flamewars.:) The Free Software Foundation members believe that all source code should be free, and remain free. It's a very heavy handed license on purpose.
You claim the GPL is neither necessary nor useful. I emphatically disagree. I think Linux would have never become as popular as it is if Linus had licensed it under the BSD license or something similar. Businesses would have made proprietary forks whenever they saw something they wanted, and ignored the core Linux project the rest of the time for fear that anything they contributed back would be used against them by competitors while the competitors kept their own Linux innovations proprietary.
GCC may be stale in some respects now (I honestly have never examined the source, I'm just going on common rumor). But it's enormously common. Would it have received as much attention, investment, and innovation if companies could just make proprietary forks of it? I doubt it.
FreeBSD is an excellent product and LLVM/Clang are excellent too. But I absolutely believe they are only strong because Linux and GCC exist. If Apple wasn't trying to make something open source and equivalent to GCC for their own use, they wouldn't be heavily investing in LLVM/Clang development. Likewise for other companies. In my view, they only have motive to strengthen liberal license open source software because competent GPL software exists. If the GPL software did not exist, or was well outside mainstream use, most big companies would revert to investing in proprietary internal products instead of liberal license open ones. If LLVM is an awesome compiler, that's only because GCC exists.
I'm fuzzy on licensing. I know you can take FreeBSD and Clang/LLVM and make a proprietary product out of it. But can you fork them and release your fork under the GPLv3?
Maybe in all seriousness the best option for the Free Software Foundation and GNU Project in a few years would just be to make a GPLv3 fork of the most recent LLVM. The Phoronix benchmark put highly optimized GCC code as slightly faster than optimized LLVM code in a few cases, but in return for dramatically slower compile times. You're already working with C and C++, is a 4% performance improvement worth losing an extra few hours to week waiting for your compiler to finish?
Android occupies the place in mobile devices that Microsoft occupies in desktops and laptops - most people buy it because it's what they know and what they see on the shelves in stores. Again, that proves nothing about the quality of Android vs. Windows Phone, iOS, WebOS, Meego, Blackberry 10, Firefox OS, Sailfish OS, or Ubuntu Touch - it just proves that Android is currently dominant.
Does it? This is of course, wild speculation. But picture two possibilities. On one hand, Office 365 and various Microsoft services and games are one product among dozens of competitors available for iOS and Android. Microsoft may not lose money directly on such an investment, but the company still shrinks as they go from a giant of the tech industry to a niche player. Now contrast that to investing so much money that they lose 100 billion over ten years on their path to reaching a third of the mobile operating system market. They lose 100 billion, but they control a third of the biggest computing device market in the history of the world, and its size makes Windows on PCs as of 2013 look small by comparison. They own the whole ecosystem - operating system, services, etc... and Apple, Google, Twitter, Facebook, and every other major and minor player in the tech industry has a huge financial incentive to interoperate nicely with Windows Phone because the target market is use. Then Microsoft's future looks much rosier than it does today, despite the losses to reach that point.
Naturally. Right now smart phones are selling faster than laptops and desktops. So in 10 years far more people will have a smart phone than a traditional computer. If Microsoft has to lose 10 billion dollars a year for the next 10 years in order to be a big part of that market, it still makes sense for them to do it. We don't have to like it, but it still makes sense for them.
Thanks for the thorough pieces of information. I learned a few things, and with the stuff I didn't learn I agree on most. However, I'm going to disagree with your last paragraph.
I think a fundamental reason most modern websites are written in languages like Perl, PHP, Python, Ruby, or even Java is that those languages have a much faster compilation cycle than C or C++ for complex applications. Of course the scripting languages are compile-and-run in one fast step. For certain classes of applications where speed is essential, you can't escape the need for C or C++ or something similar. Otherwise, I think the speed of the change-save-run cycle trumps the speed of the execution in importance by a wide margin.
A company with a big war chest of money like Google, Microsoft, Oracle, or IBM can pick (or build) the compiler that lets their 100 servers serve the results as quickly as possible because they're battling costs associated with thousands of servers. But for some company that's looking at 50 servers, or 20, or 3, the company with the quicker compiler probably has his product on sale while the other company is twiddling its thumbs. Whenever I've had to stop what I'm doing to wait for something to finish at work, inevitably I switch from being productive to wasting my time doing something else (like, just for the sake of argument, posting to Slashdot).
In the 1970s we used to get high and talk about bellbottoms. "Man, when I get some money, I'm going to get the biggest bellbottoms in history, man! Homeless people are going to be living under my pants."
/Denis Leary
If, like me, you use your phone for telephone conversations, 5 inches for the display is outrageous.
If, on the other hand, you're like most smart phone users and you probably spend more time checking email, posting to Twitter, reading Facebook posts, and shopping on your smart phone then you spend using a laptop or desktop computer, then 5 inches is good and having an iPad-size "phone" would be better.
At the rate we're going, when kids today grow up they'll be known as "Generation Gollum" for all of the time they spend hunched over tiny screens. I purposely don't have anything personal on my phone except my contact list, because as a technology worker I have enough problems with back pain, neck pain, eye strain, and cramped wrists as it is.
Okay, I'll bite. What's hyper-flawed about the unix security model? What do you want in its place, ACLs? Something else?
So you can modify it while it's live?
I'm not sure what I think about this single use VM concept. I think it has a lot of advantages. But one benefit of running a full operating system (Linux, Windows, FreeBSD, or otherwise) in your virtual machine is that you can modify it while it's live. Unless I missed something, this one-application-per-vm model assumes you set it up and run it, and then when you want to make a change you create a new vm, kill the old one, and put the new one in its place.
Maybe kill-and-replace trumps modify-in-place in most circumstances.
I think I overstated my position. Let me back it off a little bit - I think it's helpful to know how to build at least a toy application with one or two dependencies from the command line, using a simple Makefile (or in the Java world, Ant, Maven, Gradle, etc...). You don't have to build your application with many thousands, or tens of thousands, or millions of lines of source code with dozens or hundreds of dependencies by hand.
But with that relatively modest amount of knowledge that lets you work on little projects outside the IDE, I think that common errors that occur in the IDE, at least in my experience, that are related to the build system are easier to understand and fix. It also makes switching IDEs less work, because you have more of the knowledge you need to translate the build settings between them based on what they do in raw terms.
I don't think the analogy to architecture holds. In my experience, the problem with automated tools that help with creating software is that sooner or later you run into a special case that requires working around the tool. I don't think that's generally true in other domains - the architect isn't going to design 98% of the building in CAD and then use Wordpad or a Hex Editor to work directly in the CAD files to finish the last 2%.
Maybe your experience is different. In the early 2000s I worked with Microsoft's Windows CE Platform Builder IDE, but there was some features of CE at the time that weren't available through the IDE and only available from command line builds. We had to figure out the steps to modify the make files by hand to get it to work, and suddenly it was really important to understand the steps in the process that the IDE had been doing for us. (CE Platform Builder got a lot better by 2005, but we were doing this work earlier.) In the Java world, a lot of the older web toolkits have these nice quick annotations or XML you can set up, and it will automatically generate Javascript validation or SQL or HTML for you. Except if you needed a Javascript validator, SQL query, or HTML that didn't fit what the toolkits supported, you either had to modify the source yourself or work around the toolkit. The people I worked with who only wanted to use Java would eventually hit a wall - they had no choice but to learn the 'raw' Javascript, SQL, or HTML to get the work done.
So why do I think you'll benefit by knowing how to manage the entire build of your C++ application outside an IDE? Because in my experience, sooner or later you're going to stumble over some special case where you have to do that anyway. You can learn it now, and then when that happens it will be easier to handle. Or you can wait until it happens.
Enjoy. And no, I have no connection to the creator. I'm just a satisfied customer.
For most people at most levels of skill, the clickety click menus in the IDE will let them do their work faster than Vim or Emacs. But if you're damn good with your Vim or Emacs, you can do all of your work - text editing, multi-file search, auto-complete, jump to definition, regular expression search, regular expression search and replace, jump between multiple buffers, delete, copy, and otherwise manipulate files on the filesystem, launch your application, run your unit tests, compile, etc... all without taking your hands away from the home row keys on the keyboard.
I'm definitely not that good with Vim or Emacs. But it's a fun goal to have. We may not realize it but constantly switching one hand from keyboard to mouse many hundreds of times per day has a productivity impact.
I don't know how common it is, but I've heard of a number of Emacs users that love Emacs for the full featured scripting and customization, but they do set it to Vi compatibility mode for the actual text editing.
I think an honest cost versus benefit analysis would lead a developer to pick a few tools like Vim, Emacs, or Visual Studio and spend a few weeks mastering the keystrokes so they can be blisteringly productive with it.
But in my real world experience, most people learn the basics to get their job done and don't bother to dig further. I use Vim all over the place, but I confess I just never bothered to memorize the keystrokes for multiple copy-paste buffers or multiple editing buffers, even though I'm absolutely certain both features would be immensely useful for me. That's specifically why I suggested making more games out of it.
I'm grateful for this discussion, it's renewed my resolve to make my Vim skills top notch.
Java is admittedly up with COBOL among the most verbose programming languages around. But even comparing C++ with Python, Perl, Ruby, Lisp, etc.... once your application gets beyond very basic complexity any of the others will let you accomplish the same tasks with far fewer lines of code and in many cases broader abstractions. So even in a C++ with IDE vs Perl with Emacs face-off, I'm not sure Intellisense makes C++ the winner.
Obviously if performance is critical then any other advantage of your scripting languages are irrelevant. I'm speaking of the common cases when the performance differences are irrelevant.
That's a fair point, but I would counter with two counter-points.
First, some languages have a REPL (the interactive Read Eval Print Loop), so if you're not sure how function X works, you can either call a documentation function on X in your REPL or invoke X directly and see what happens, and get information you want from any error messages. If you're unsure about some aspect of the invocation, you can experiment with different parameters directly in the REPL. C++ naturally doesn't support this, but many other languages do.
Secondly, some languages just lend themselves to less code, period, or other language features that reduce the amount you need to write. Sometimes when I'm writing Java I get the overwhelming feeling that Intelli-sense is helping me muddle more quickly through mountains of code that I wouldn't have to write in the first place if I was using Python, Perl, or Clojure (just to pick three other languages I like).
I'll take your word for it. ( No sarcasm intended. ) I've heard this repeatedly, but I haven't worked with C++ for a long time so I have no grounds for comparison.
To my knowledge, anything you can do in a traditional IDE can also be done in VIM and Emacs. However, the learning curve for doing it in VIM and Emacs is a lot steeper. It's hard to sell both individuals and companies on that. If I want a top and bottom split screen to compare two files in VIM, I know there's a few keystrokes to get me there but I don't remember what they are. IDEs provide that with a few clicks - slower than the VIM keystrokes if you have the VIM keystrokes memorized, much faster if you have to look them up. Likewise for multi-file grep, multi-file search and replace, auto-complete, jump-to-function-definition, jump-to-variable-declaration, etc...
What we really need is more games like this one: http://vim-adventures.com/
Make a game out of learning VIM or Emacs, including the advanced features. Then maybe your average developer can become faster with them than an IDE. But without that, the learning curve to reach the point where you can use VIM or Emacs as fast or faster than you can use Visual Studio or Eclipse is just too long.
There are plugins to add Intelli-sense to Emacs and Vim, of course.
In my opinion - an opinion I am sure is popular on Slashdot - you need to know your programming language and basic build steps very well before you move to an IDE. An expert in Visual Studio can use Visual Studio quickly, but if Visual Studio does something he does not expect, or he has to work outside it for some reason, or he needs to develop for a platform that Visual Studio does not target, his productivity is shot to hell. An expert in C++ development from a text editor, console, and manually edited makefiles can learn to use Visual Studio quickly and will rapidly approach the Visual Studio expert for productivity, but if Visual Studio does something he does not expect, he can drop out and look at the underlying environment with ease. If he needs to switch to a C++ development chain outside Visual Studio, the transition is quick. And if someone comes out with an IDE that is equal or better than Visual Studio for his needs, he can switch quickly.
A more interesting discussion is languages that seem to thrive without IDEs, like Python, Lisp, or Perl. In those, I think the lack of an IDE is not a handicap - the language just lets you play with pretty complex abstractions with relatively few lines of code, so you don't need a nice tool putting in foo.getBar().getBaz().doQuux().parse("freeze").insert("qubits").add(42) for you. I work with Java, I can do all of my work from a console plus Vim, but I'm just so much faster in Eclipse or Netbeans. I play with Python and Lisp in my spare time, and in those I don't see how fancy developer tools can add as much value for either language.
Is Visual Studio really that awesome, or is it merely good but has raving fans because of sheer inertia (e.g. Visual Studio can do 5000 things and IDE X can do 5000 things just as quickly, but tens of thousands of developers already know how to do 3500 of those things in Visual Studio and don't feel like tackling the equivalent learning curve in IDE X.)
For IDEs that claim to be C++ friendly there is Eclipse, Netbeans, KDevelop, QT Creator, Code::Blocks, there must be others. Does Visual Studio really trump them all?
The problem is that they don't clearly define "server". If I use Bittorrent to download a Debian release, other downloaders are pulling the data from me. Will I be blocked? If I'm hosting a Minecraft server, will that be blocked? What about ownCloud, Tonido Plug, Gotomypc.com. Are they blocked? What if my home security system allows remote access, can I use that without violating my terms of service? What if I set up a simple S/FTP server for me and a few friends to access? I can understand an argument that I shouldn't run a node for newegg.com out of my basement, but I think Google should delineate more clearly between what kinds of home service are forbidden on a consumer plan - and if they really mean everything, it sucks.
And in terms of Evil, Google complained that they couldn't query public posts on Facebook while Bing can, but can Bing or anyone else query public posts on Google Plus? Of course not. Are they opening Google Plus APIs to third party app developers so users can cross-read and cross-post content and comments from other networks? Of course not. I strongly suspect that Google circa 2005 would have done differently. But now that they've settled further into their position as an juggernaut, they've started to take pages from the Microsoft play book.
I still trust Google more than I trust Microsoft. But the gap in credibility between the two companies is narrowing.
I understand how that would work if I took, say, FreeBSD and LLVM and made a virtual machine, and in the virtual machine I write some piece of code that runs on the FreeBSD and compiles with LLVM, but the code I wrote is itself GPL. Then the release has BSD license restrictions on the operating system and compiler bits, and GPL license restrictions on the code I write.
But if I modify the LLVM compiler, and release the modified version, I can make it part of proprietary software and still comply with the original BSD license. If I modify the LLVM compiler, and want to release the modified version GPL, then I have BSD license code calling into GPL license code, and GPL license code calling into BSD license code. As far as I can tell, that violates the terms of the GPL - all of the code it links with has to be GPL also.
As far as I can tell, that combination can't be done. I honestly don't think the BSD license creators were intentionally trying to sink the GPL with their licensing provisions, but the practical result is that the BSD license is more friendly to re-use in proprietary software than re-use in "copyleft" ( https://www.gnu.org/copyleft/copyleft.html ) software.
So I suppose if you want to make a "copyleft" fork of BSD license software, you would need to use something like the LGPL or the Eclipse Public License. Both of those require all redistribution of the software in source or binary form to include access to the source code of the LGPL or EPL license code and grant the recipient the right to redistribute that code in turn under the same license. But both do not place restrictions on other software that links with or otherwise interoperates with the LGPL or EPL code. But again, I have a very weak understanding of these things.
This is one of Slashdot's favorite flamewars. :) The Free Software Foundation members believe that all source code should be free, and remain free. It's a very heavy handed license on purpose.
You claim the GPL is neither necessary nor useful. I emphatically disagree. I think Linux would have never become as popular as it is if Linus had licensed it under the BSD license or something similar. Businesses would have made proprietary forks whenever they saw something they wanted, and ignored the core Linux project the rest of the time for fear that anything they contributed back would be used against them by competitors while the competitors kept their own Linux innovations proprietary.
GCC may be stale in some respects now (I honestly have never examined the source, I'm just going on common rumor). But it's enormously common. Would it have received as much attention, investment, and innovation if companies could just make proprietary forks of it? I doubt it.
FreeBSD is an excellent product and LLVM/Clang are excellent too. But I absolutely believe they are only strong because Linux and GCC exist. If Apple wasn't trying to make something open source and equivalent to GCC for their own use, they wouldn't be heavily investing in LLVM/Clang development. Likewise for other companies. In my view, they only have motive to strengthen liberal license open source software because competent GPL software exists. If the GPL software did not exist, or was well outside mainstream use, most big companies would revert to investing in proprietary internal products instead of liberal license open ones. If LLVM is an awesome compiler, that's only because GCC exists.
I'm fuzzy on licensing. I know you can take FreeBSD and Clang/LLVM and make a proprietary product out of it. But can you fork them and release your fork under the GPLv3?
Maybe in all seriousness the best option for the Free Software Foundation and GNU Project in a few years would just be to make a GPLv3 fork of the most recent LLVM. The Phoronix benchmark put highly optimized GCC code as slightly faster than optimized LLVM code in a few cases, but in return for dramatically slower compile times. You're already working with C and C++, is a 4% performance improvement worth losing an extra few hours to week waiting for your compiler to finish?
A piece of junk how? What's wrong with it?
Android occupies the place in mobile devices that Microsoft occupies in desktops and laptops - most people buy it because it's what they know and what they see on the shelves in stores. Again, that proves nothing about the quality of Android vs. Windows Phone, iOS, WebOS, Meego, Blackberry 10, Firefox OS, Sailfish OS, or Ubuntu Touch - it just proves that Android is currently dominant.
Does it? This is of course, wild speculation. But picture two possibilities. On one hand, Office 365 and various Microsoft services and games are one product among dozens of competitors available for iOS and Android. Microsoft may not lose money directly on such an investment, but the company still shrinks as they go from a giant of the tech industry to a niche player.
Now contrast that to investing so much money that they lose 100 billion over ten years on their path to reaching a third of the mobile operating system market. They lose 100 billion, but they control a third of the biggest computing device market in the history of the world, and its size makes Windows on PCs as of 2013 look small by comparison. They own the whole ecosystem - operating system, services, etc... and Apple, Google, Twitter, Facebook, and every other major and minor player in the tech industry has a huge financial incentive to interoperate nicely with Windows Phone because the target market is use. Then Microsoft's future looks much rosier than it does today, despite the losses to reach that point.
Naturally. Right now smart phones are selling faster than laptops and desktops. So in 10 years far more people will have a smart phone than a traditional computer. If Microsoft has to lose 10 billion dollars a year for the next 10 years in order to be a big part of that market, it still makes sense for them to do it. We don't have to like it, but it still makes sense for them.