Paul Graham, it's time to put your money where your mouth is - <AUTHOR> http://blog.helioid.com/2012/03/paul-grahams-frighteningly-ambitious-ideas/

<comment><USER2> He's missing a subtlety in the essay. Even if the eventual vision is ambitious, don't tackle it head-on. Start with something that looks like a toy.

 _"Don't try to construct the future like a building, because your current blueprint is almost certainly mistaken."_

<comment><USER3> This is a great point, but pg actually did touch on it in his essay:

 _Let me conclude with some tactical advice. If you want to take on a problem as big as the ones I've discussed, don't make a direct frontal attack on it. Don't say, for example, that you're going to replace email. If you do that you raise too many expectations. Your employees and investors will constantly be asking "are we there yet?" and you'll have an army of haters waiting to see you fail. Just say you're building todo-list software. That sounds harmless. People can notice you've replaced email when it's a fait accompli._

It was in the 'tactics' section near the bottom of <http://www.paulgraham.com/ambitious.html>

<comment><USER2> _"..but pg actually did touch on it.."_

That's what I said. I just quoted a different part of the same section :)

<comment><USER4> You said "He's missing..." and the other guy read "he" as "PG" but you meant the author of the linked post.

</comment></comment></comment></comment><comment><USER5> I think there's some selection bias going on here. Companies which aim to do frighteningly ambitious things are less likely to launch, and most of us only ever hear about the YC companies which launch.

Just based on counting noses it's clear that there's a bunch of YC companies every year which vanish without a trace; I'm sure many of them were failed runs at frighteningly ambitious ideas.

<comment><USER6> Additionally, we only hear about what they've decided to launch with. If they start with a grandiose idea, start it and find it impossible, we only hear about the twitter app they salvaged from the wreckage. If they _have a plan to get to world domination_ , but don't tell you, we only see a new calendar site.

<comment><USER7> And the idea that people who set out to change industries start with something that is not perceived as so is included in that same Paul Graham essay. i.e. AirBnB launched as a way to rent out airbeds and couches. They didn't launch saying they will revolutionize the hotel industry but that might the end result of their work.

</comment></comment></comment><comment><USER8> Something that bothers me about HN is a sort of a tactical assault on the front page between articles. The title is semi-inflammatory and stirs some controversy but the article doesn't feel researched. This article is no exception. It feels more like a post to garner publicity by loudly going against a more mainstream opinion. Perhaps if the author offered any analysis I might not feel so offended. Even a list of all the start ups funded last year and their topics would offer more insight.

</comment><comment><USER9> On the contrary, I think YC and PG have put their money where their mouth is.

Search: Greplin

Email: eTacts (sort of), Taskforce (emails => todo list), Xobni

Movies / Music: Earbits

Publishing: Hyperink

These are just off the top of my head. I'm sure there are more. Does the author want an entire class to be new search engines?

<comment><USER10> * Heroku took on the traditional hosting space and has done quite well

* justin.tv pioneered live broadcasting online

</comment></comment><comment><USER11> This was one of the top stories a few minutes ago and suddenly it's on the second page. That's a shame, because it needs to be addressed.

Dear startups,

If you want to do something very innovative, don't apply to YC with it. YC is a three month program designed to make companies; it is not a research program. On the application, you will have to describe what you're working on in three sentences. That's not a design flaw; they're looking for things that can be described in a few sentences.

There have been exceptions -- people that went through the program who were (and are) working on hard problems -- but if you look at the numbers, they are clearly the exception.

YC is great. I'm glad it exists. But understand what it is, not what you want it to be.

</comment><comment><USER12> This seems exactly backwards.

I took that essay as a call for more people to please start applying to YC with really big ideas so they can fund more of them.

<comment><USER13> I agree. It seems to me the essay came more from a place of wanting to see lots of big ideas come his way. And more of the people who are attracted to the big idea and can at the very least convince you they'd have a shot at actually pulling it off. Those are the people he'd love to see walk in the door.

</comment></comment><comment><USER14> I have my criticisms (or concerns to be more charitable) with PG and the YC model, but I don't think this is fair. In addition to people who have pointed out the survivorship / selection bias, as well as the number of companies YC has funded that are aiming very high, there's also the issue of YC only being able to fund what people apply for.

Though I guess they could convince people to drop a good idea for a pie-in- the-sky idea, but I think what happens more often is that they get them to drop a mediocre idea for a better one.

But anyway, YC gets like 2k apps per cycle, but most of those are going to be for non-devastatingly-ambitious ideas, and then the ones that are have to have great teams behind them. If you don't see very many coming out of YC, it might be because there weren't that many to start with.

</comment><comment><USER15> It seems this argument is based on a misunderstanding of Paul Graham's essay.

> that the biggest opportunities for revolution often sound like the craziest > ideas at first. Graham points out the flawed reasoning in investors' so > often shying away from projects trying to pull off these sorts of major > revolutions, but Y Combinator itself mostly gravitates toward startups > making relatively small, iterative progress on existing idea spaces

Graham is pointing out how frightening these startup ideas are _because_ they are existing markets ripe for some innovation. Eg. search, universities, compilers.

<comment><USER16> And just how are compilers a business space in which innovation should take place? Most major compilers activity has long-since been displaced into open- source and academia.

<comment><USER17> If you develop a compiler that, say, parallelizes the hell out of code, you'll have a group of massive companies breaking down your door and throwing money at you.

Edit: Also, compilers to move code from mainframes to commodity servers, recompilers to switch architectures (e.g. Rosetta by Transitive), etc are big business. Are they going to make you a billionaire? Probably not. Can you make a couple million and a great ROI? Absolutely.

<comment><USER16> >If you develop a compiler that, say, parallelizes the hell out of code, you'll have a group of massive companies breaking down your door and throwing money at you.

I speak with some fair knowledge of compilers, PLs, runtime systems, and OSs when I say: massive companies will also throw money at me if I can turn lead into gold.

A compiler cannot transform an inherently stateful, sequential program into an inherently parallel program that can be easily parallelized-the-hell-out-of. This is why there has been actual interest in shifting over to functional programming among those who need lots and lots of concurrency.

There do exist systems that will, for example, guarantee the determinism of threaded applications -- making them more predictable and debuggable. But DThreads still won't take a fold and turn it into a map.

<comment><USER18> Proebsting has shown that compilers double performance about every 18 years - <http://research.microsoft.com/en-us/um/people/toddpro/>

Given enough time and memory more things are possible. Heck you could probably add speculative execution to many programs for more speedup. You are right in that the easy stuff has already been done, but that doesn't mean the hard stuff can't be done - just that it is hard. The good news is that people are prepared to pay for hard stuff.

<comment><USER16> 1) See my other post, where I list out _how_ you _would_ build a Sufficiently Smart Compiler for parallelizing preexisting code.

2) You've gone into the research world, which concedes my original point about it not being a viable _business_ ;-).

<comment><USER18> WRT to 1) you left out profiled feedback which would help with some of the analysis choices. Something else that can be done is to compile multiple versions of things and makes choices/switch things around according to circumstances at runtime (as pretty much every modern JIT does). We also still have a "waste not" mentality which is why I mentioned speculative execution which inherently wastes CPU in order to get quicker answers.

2) Not really. You've used current thinking to define your business model. Think disruptive instead. And worst case you'd end up spending Ycombinator money and end up with a better CV.

Some thoughts: It is possible now for a compiler to chew through terabytes of open source code to build up an information bank. Internal representation of code can be centrally submitted to see if anything matches and provides more compilation hints. Runtime profiling could submit back big O information. An organisation could run all the possibilities Seti-at-home style. ie rather than the compiler having to make more intelligent choices, it can just try all the choices.

<comment><USER16> 1) OK, I concede this one, certainly we can use profiling to get an idea of what a given function's performance curve looks like. We just need some notion of how to vary the size of the inputs in a controlled way when profiling, and then we need to look at the curve and decide what kind of curve we're seeing, and _then_ we need to actually run the statistical software to calculate the precise terms of the curve.

To my knowledge, the middle step is actually the hardest. I'm no statistician, but do we have math/software that can look at a curve and distinguish a logarithmic function with little error in the data from a linear function with lots of error in the data?

>2) Not really. You've used current thinking to define your business model. Think disruptive instead. And worst case you'd end up spending Ycombinator money and end up with a better CV.

The man-years here are the dominant cost. A SSC falls outside the start-up business model of releasing a "Minimum Viable Product" and all that jazz. You can't build a _minimum_ SSC without building _most of the whole thing_.

That doesn't mean I wouldn't take someone's money to do it, but I'd be asking for a research-project budget, not an equity investment that has to be "ramen profitable".

Besides, I prefer home-made vegetable curry to ramen any day ;-).

<comment><USER18> See slide 6 of this IBM presentation [http://webdocs.cs.ualberta.ca/~amaral/IBM-Stoodley- talks/Uof...](http://webdocs.cs.ualberta.ca/~amaral/IBM-Stoodley- talks/UofAKASWideAudience.pdf) (warning: pdf). Note how little compilers cost relative to other ways of improving performance.

You are still thinking "cathedral" as the project structure. I think "bazaar" is a better approach - try all the things, fling stuff against the wall and see what sticks. Use the terabytes of existing code to learn. I see the latter like spoken language translation. The approach used to be coming up with rules from experts which is very expensive. Nowadays they use statistical approaches which relies on having lots of data, uses humungous amounts of machine time to build the translation, but uses very few (expensive) people.

A YC startup doesn't have to be profitable or even come up with a MVP - it has to show there is merit to what they doing and some probability of success in the long run.

<comment><USER18> Another example from a favoured database - MongoDB. Rather than trying to come up with optimal query plans they try all pertinent ones concurrently. Whichever finishes first is noted and used in the future. Its performance results continue to be monitored and if they start diverging all are tried again.

This means not having to guess big O correctly, or access patterns or other stuff in advance. It is possible to add future optimisations and not worry about current ones since they just won't be used work inapplicable workloads.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER19> geez, what is up with this spate of snide/cynical posts about PG and/or YC? it's not necessary the content. I mean, I love almost all of what PG says in his essays, but there are at times genuine questions and doubts (e.g., I've heard schlep as a verb more than a noun). Sometimes, these questions of a larger, fundamental discussion (e.g., copyrights & property). questioning is fine, and is necessary in order to attain greater understanding.

what I'm getting annoyed at is the tone I'm sensing -- it's sometimes downright sneering. i know it's been brought up very recently as well, and PG has said it's been happening gradually as the site has grown. i've read the essay on trolls, but this seems like it's something different. jealousy is also something that increases as a function of success, and when jealousy crosses a threshold, it morphs into resentment. just sayin'...

<comment><USER20> I am not trying to invoke Godwin's Law, but in the 1930s, somehow millions of Germans were convinced that Hitler was a good idea. In retrospect, he clearly wasn't.

Whenever a lot of people start getting really excited by someone or something, I think that there is a certain subset of people, myself included, that react by getting overly skeptical, by looking for the problems. Personally, I try to be thoughtful and present any negatives I find in a polite and well reasoned manner, but I am sure that there are others who simply have a knee-jerk reaction of the sort: "I can't believe you're drinking the Kool-Aid, you idiot."

</comment></comment><comment><USER21> To Graham's point about the things we do that will appear ridiculous to future generations, I believe travel is one of the most obvious. Think about this- people pay three times the normal ticket price to fly "first class" and have a seat that is not uncomfortable to sit in for more than an hour, a drink that is served in a glass, and a meal. People are subjected to long lines, security screenings, and an archaic, drawn-out search for the cheapest tickets. And even with all this, the airlines are still losing!

</comment><comment><USER22> I personally think it is a double edge sword, very few people are pursuing truly large ideas because the odds of finding funding to even get started just are not there and some ideas require funding to even get off the ground. As someone who pursued a very large scale idea, I know all too well that investors just don't seem to be interested in efforts that require large amounts of upfront work and infrastructure before they can even launch. I think Amazon was the last effort of that kind, that has been funded. Ideas like Facebook are more palatable because the infrastructure requirements scales with the company. With search you really are not afforded that luxury, to compete you have big data requirements from day one. Ultimately big data requirements is was what doomed my idea and to this day I have not found many investors that have an appetite for a start-up that has big data requirements from day one. In saying that, my experience is subjective and I am not playing ball in the valley, so take my post for what it is a personal observation.

</comment><comment><USER23> "Empirically, the way to do really big things seems to be to start with deceptively small things. Want to dominate microcomputer software? Start by writing a Basic interpreter for a machine with a few thousand users. Want to make the universal web site? Start by building a site for Harvard undergrads to stalk one another."

<http://paulgraham.com/ambitious.html>

</comment><comment><USER24> I think many people are forgetting a key part, if not THE key part, in the selection process for YC companies, and that's the TEAM. The idea is second to the people behind it when PG and company make their selections (and in many cases, YC teams end up going with a totally different idea than what they applied with), at least most of the time.

There is far too much focus on selection bias around ideas in both this article and the comments, when in fact PG is simply putting faith in teams that happen to be passionate about certain ideas (that may or may not fall into his ambitious ideas categories).

</comment><comment><USER25> Part of the reason for the essay is surely to encourage more ambitious YC applications. Likely no one is more tired of flavor of the day mashups than YC partners who have to wade through them.

</comment><comment><USER26> "Let me conclude with some tactical advice. If you want to take on a problem as big as the ones I've discussed, don't make a direct frontal attack on it."

I remember somewhere that AirBnB said they wanted to become the best marketplace for trading used goods. That's pretty ambitious, but they're attacking it sideways by letting people rent out rooms first.

</comment><comment><USER27> I have nothing to do with YC and no reason to defend pg, but I will say that this article clearly misses one of his big points: it's very hard to be successful if your whole goal is to change the world from day 1. Even if it is your secret goal - you are probably going to run out of money before you get the chance to.

</comment><comment><USER28> Well, to be fair, he does say that you need to take a novel (and niche) angle on doing such a thing (not to say your company doesn't). To secure the investment on any extremely ambitious idea you would also need to be very effective in person; much more so than someone with a less ambitious, more realistic idea.

</comment><comment><USER29> I understand what the author's saying and I think (not being as experienced as some on HN) that he's got a bit of a point. But boy, if you're gonna call out a man with metals on his jacket, you better have something to back it up.

Or a least a byline.

</comment><comment><USER30> HireArt = replace universities.

It's a deceptively focused/small offering to start with but they have the key components required to become a credentialing system outside of the university/college system.

It's easy to look at YC startups and say they aren't pursuing massive visions but the truth is many of them are just starting with some tiny subset of a big problem.

</comment><comment><USER31> Can we have a rule, like the one about headlines starting with numbers ("12 ways to.."), for headlines starting "Paul Graham"?

</comment><comment><USER16> Meh. If it was really revolutionary, you would have to spend a few pages explaining what the hell it is, or make people go read research work from 30 years ago to understand it.</comment>


WhatsApp Blog – Why we don't sell ads - <AUTHOR> https://blog.whatsapp.com/245/Why-we-dont-sell-ads? <comment><USER2> You should add the year of publication to the title.</comment>


Windows 10 automatically spies on your kids and sends you their activity dossier - <AUTHOR> http://boingboing.net/2015/08/10/windows-10.html

<comment><USER2> So he enabled family mode on his son's Microsoft account but was then surprised it did the things it said it would? This feature is literally on the front page of Microsoft's family accounts services.

Also, it seems weird that a parent would have no interest in the digital lives of their children, especially since these features are mainly aimed at protecting against predators.</comment>


Ask PG: Something wrong with HN? - <AUTHOR>

I've noticed (past week or so) that comments that are at -4 still have a downvote arrow. They can be downvoted, they remain at minus 4, and (to the best of my knowledge) the poster actually loses karma even though the cap is -4. <comment><USER2> This has been an intentional change that happened at least a couple of months ago. The idea is to discourage smart-ass remarks by punishing them more harshly, but also to discourage piling onto a downvote frienzy by not displaying the extraordinarily low vote count.

I'm not convinced that works, since the post still goes lighter, so you can tell how badly it's been downvoted, but that's the intention.

<comment><USER3> To be honest I hadn't noticed a problem with too many smart-ass remarks before the change. Everyone makes poor decisions from time to time and punishing them more harshly seems unnecessary.

<comment><USER4> "punish"? As far as I know, you can't cash in karma for money or women. So I am not sure what you lose when you get downvoted to minus a billion.

<comment><USER5> I know you're on a comedic roll, but "women" are not objects to be earned, owned and traded as prizes.

Please mind your language.

<comment><USER6> Whether your parent's comment constitutes inappropriate objectification of women or instead your comment constitutes an insufficient sense of humor, that debate could fill volumes. Now is not the time for that.

Please stop moralizing.

</comment></comment></comment></comment></comment><comment><USER7> I don't know the exact details (or, this may be all there is to it), but, I've seen a few people mention that votes below -4 are still counted, but the total will never be _shown_ anything lower. IIRC, someone compared it to the (in)famous orange dot experiment.

<comment><USER8> Correct, I believe that behavior is in place to discourage people from piling on lots of down votes.

<comment><USER9> Which I don't know how effective that is. There are a lot of people who don't mind "topping them off" at 5, only to become the 30th person to down-vote them.

<comment><USER10> Yeah I assumed that the limit was -5 without thinking about it to much. Some people have put something stupid in really popular threads and lost a stack.

</comment></comment></comment></comment><comment><USER11> Correct, I've noticed it as well. For example this comment

<http://news.ycombinator.com/item?id=1432322>

lost me something like 10 karma. There's another one of mine similar.

It was pretty awesome to have my average comment karma go from ~4 to <2 in like 2 weeks due to 2 "-4" comments that the community disagreed with.

 _sigh_

<comment><USER12> The comment you linked to would not have been downvoted particularly because people disagreed with it, but because it didn't really add anything to the discussion. A reply like that doesn't really produce good discussion, and a lot of people on Hacker News try to discourage that.

<comment><USER11> At the time there was lots of handwaving, but nobody was bringing forward the obvious, when somebody owes you north of six figures, you sue them. Not sure why that didn't contribute anything, but that's what most rational adults do in that situation. It certainly wasn't part of the thread until then.

In my experience, a two word response containing an obvious course of action that everybody is overlooking like that would have either been downvoted to -4+ or upvoted to 30. It's a crap shoot.

Not sure how suing somebody who owes you that kind of money requires a long exposition to explain. The subsequent comment asking for alternatives was upvoted into positive territory that same day it was posted, without adding anything else and with no responses in the form of alternatives.

 _edit_

similar, newer comments <http://news.ycombinator.com/item?id=1432131> <http://news.ycombinator.com/item?id=1432131> <http://news.ycombinator.com/item?id=1432612> <http://news.ycombinator.com/item?id=1432133> were not similarly downvoted (and a couple were actually upvoted) yet add no more to the discussion than mine (since they came after my comment and recommend the same thing, by definition, they do not add anything "new") and probably should have just been responses to my original comment in the form of adding specificity or methods.

It's not the downvotes per se that I mind. People can feel free to disagree that a lawsuit is a bad course of action when somebody owes you $126,000. I think they are wrong, but whatever. It's not like any of the 10 people who hit the little down arrow could be bothered to type "I disagree with this because...". But that people continued to downvote long after my suggestion hit -4 shows that allowing downvotes after hitting -4 doesn't work. At that point, I'm just being targeted. Particularly when essentially the same comments were untouched or upvoted. If the thread hadn't moved off the front page rather quickly I'm sure I would have taken more hits.

Okay HN community! I got it! I should have provided half a dozen words telling them to sue instead of 3! Clearly that's the community standard as the linked comments demonstrate.

I now realize I'm now edw519 or patio11, where every 3 word comment gets half a dozen upvotes. Perhaps I should put some numbers next to my handle?

<comment><USER13> "At the time there was lots of handwaving, but nobody was bringing forward the obvious, when somebody owes you north of six figures, you sue them. Not sure why that didn't contribute anything, but that's what most rational adults do in that situation. It certainly wasn't part of the thread until then."

I'm consistently amused at how people who get their comments downvoted complain about the downvoting by rephrasing the point they were trying to make in order to make it clearer and more articulate. I do it, too. The joke is that if the original post expressed your point as clearly as the complaint post, we wouldn't get downvoted in the first place.

Writing for human consumption is a frustrating and inexact task. You might sound like a complete asshole without meaning to. I, in particular, often have that problem.

<comment><USER11> Usually if nobody understands it after the first two tries, I just say it louder, then slower, then louder and slower.

</comment></comment></comment></comment></comment><comment><USER3> Rather interestingly I just noticed a rather extreme example.

This comment had lost its author 75 points of karma by the time I made this post and still shows up as -4:

<http://news.ycombinator.com/item?id=1444511>

</comment><comment><USER14> Since there's a chance PG will look at this thread and my email has been ignored, if you or a mod could restore my _ck_ account I'd be grateful (and disable this one, I don't care about lost "karma").

I still have no idea why the _ck_ account was disabled in the first place.

</comment><comment><USER15> My thoughts on 'karma' or simple up/down rating systems:

A few years ago, I discovered a site called Reddit. After awhile, I realized there were comments on the site, and began reading them. While a few added to my enjoyment and understanding of the articles, I have to admit that what really attracted me were the pun threads.

Well, I thought I would attempt this interesting variety of interaction. I began to post my thoughts on subjects. I was surprised to see that my well thought-out comments were getting downvoted. Sometimes quite strongly.

Hmm... I reexamined my arguments and how I conveyed them. I experimented with different ways of expressing myself. However, most of the time when I made a comment which I thought was a bit insightful, I would see negative karma.

Finally, I changed my approach. Instead of thinking about a subject and writing what I thought of it, I instead peppered the site with knee-jerk, humorous comments.

My greatest success, by the way, was a one-line "your mom" joke which earned me something like 270 karma for a couple of seconds' work.

I found the worst problem to be in the subreddits. As I quickly learned, subreddits are inhabited by people who want their views validated. Even correcting dangerous misconceptions around basic physics would get harsh downvotes. Meanwhile, comments which perpetuated the status quo of ignorance were celebrated.

Up/down community rating does not provide any sort of legitimacy to posters. It only provides popularity. As one who doesn't take political advice from movie stars (for example), I find it appalling that this system is spreading.

As for the specifics of downvoting repeatedly, this is simple lynch mob mentality. A -1 rating has just as much power to say, "we don't like the way you express yourself," as a -10 rating. The only thing that -10 adds is a reflection of groupthink and people venting angst.

</comment><comment><USER16> Test it: Down vote this post as much as possible.

<comment><USER16> And up vote this one to balance the karma</comment></comment>


Ask YC: Avoiding "enterprise software" and self-justifying IT groups? - <AUTHOR>

One of the things I miss most about working at a startup is that IT in a startup focuses on actual productivity.  Ironically, in a tiny company with a keen instinct for survival, the IT people at a startup don't seem as paranoid as those in large companies.  There's no "herd" making things needlessly difficult.  And certainly no zealots who believe the only conceivable way to solve a problem is by paying (horrible) software companies millions in licenses.  There's no automatic disdain for free or open-source software, either.<p>What would you do to transform a larger company?  To challenge them to take a risk and try to get the job done without Microsoft?  To instill in people the importance of proper research (e.g. don't pay thousands for a helpdesk when there are dozens of free ticketing systems)?  To reassure them that "invisible", highly effective systems are productive and won't cause IT people to be fired? <comment><USER2> This is simply the nature of large companies. Trying to "transform" it seems like tilting at windmills. That's why people start startups.</comment>


Can a local variable's memory be accessed outside its scope? - <AUTHOR> http://stackoverflow.com/questions/6441218/can-a-local-variables-memory-be-accessed-outside-its-scope/6445794#6445794

<comment><USER3> The original question asked about C++, but in the old days of assembly language, accessing "out of scope" data from the stack was fairly useful.

For example, Apple II computers had a series of slots into which expansion cards could be inserted to add new features to the computer. These cards, as you might expect, often needed controller software, and this was supplied via on-card ROM. The code in this ROM, by convention, was mapped into memory at address $Cx00, where x was the slot number the user happened to choose for the card. As a result, when this code was called, it had no idea where it resided in memory and, consequently, which slot its card was in. To figure these things out, the controller code used the following trick:

        JSR IORTS
        TSX
        LDA $100,X

The JSR instruction makes a subroutine call, which causes the address of the next instruction to be pushed onto the system stack and then transfers control to the subroutine, in this case a well-known subroutine in system ROM called IORTS. This routine, as its name implies, is just an RTS instruction, so it returns immediately back to its caller. Control thus returns to the second instruction of our code, which copies the stack pointer into the X register. The third instruction then uses this pointer to read _above_ the top of the system stack to obtain the value that was there during the call to IORTS. This value, of course, was the most-significant byte of the return address pushed onto the stack by the JSR instruction. Now the code knows where it resides.

If you want to see a prime example of this technique in some famous code hand- assembled by Steve Wozniak 35 years ago, take a look at page 22 of the following PDF file. It contains the boot code for the Apple Disk II controller card:

[https://s3.amazonaws.com/s3data.computerhistory.org/atchm/do...](https://s3.amazonaws.com/s3data.computerhistory.org/atchm/documents/102723983-05-01-acc.pdf)

<comment><USER4> From what I recall, that's not necessarily safe on modern OSes and processors due to interrupts, but there's still buggy code out there that relies on it.

<comment><USER5> I can't think of a modern OS/ISA combination where that's the case. State will get saved on a kernel mode stack (if not somewhere else totally). This is because the stack pointer is controlled by user mode, and you don't want it to do something like set the stack pointer to some area in kernel space, and then invoke a software interrupt in order to overwrite privileged code or data.

<comment><USER6> Maybe in modern OS/CPU combos, but on a 70s era 8 bit CPU like the 6502 the code as described above is definitely vulnerable to a hardware interrupt overwriting the out of scope memory area in question before it is used. One way to make it safe would be to disable interrupts, although non-maskable interrupts would still be a problem.

However, although I haven't checked the details, I suspect that something much cleverer does make the trick robust. What would the hardware interrupt service routine overwrite the out of scope memory with ? For many CPUs, maybe for the 6502, it would be the return address from the interrupt service routine - which is slightly different to the originally pushed return address, but still on the same page, which is all that's required. So a little bit of Woz magic perhaps.

</comment></comment></comment></comment><comment><USER7> Every programmer that uses a language with C's memory model (and preferably absolutely every programmer) should know the following by heart:

        |</comment><comment>-| - max address
        |STACK ↓|
        |  SP   | ← stack pointer
        | ..... |
        | ..... |
        |HEAP  ↑|
        |</comment><comment>-|
        |other  |
        |mapped |
        |memory |
        |</comment><comment>-| - <USER2>

Barring alternate memory managers (if you use one, you know the diagram and are now writing a post why it's wrong), stack grows down, heap grows up. When you call a function, SP is decremented by the total size of the stack variables in the called function, the address of the next instruction in the current function is written at SP, and each variable in the called function is written at SP - x, where x is an offset calculated by the compiler. When the function returns, the memory isn't cleared, the address of where we left off the caller is read, SP is incremented to its previous value, and the processor resumes from that point. The "push" and "pop" cpu instructions don't allocate memory, they're just a shorthand to decrement SP and copy a value.

For a fun demonstration, compile this C code with -O0 (optimizations off, or debug build in Visual Studio, IIRC):

        #include <stdio.h>

        int foo(int unused) {
            int a;
            return a;
        }

        int bar(int x) {
            int b;
            b = x;
            return b;
        }

        int main(int argc, char** argv) {
            printf("%d\n", foo());
            bar(10);
            printf("%d\n", foo());
            return 0;
        }

<comment><USER8> Not always. Stacks can grow up in some CPUs. [http://stackoverflow.com/questions/664744/what-is-the- direct...](http://stackoverflow.com/questions/664744/what-is-the-direction-of- stack-growth-in-most-modern-systems)

And then there's Itanium, which has _two_ separate stacks, one growing up and one growing down...

</comment></comment><comment><USER9> Kinda, but not exactly, same kind of issue that is prevalent when learning private/protected/public (or the equivalents). They do not actually prevent code from outside accessing the bits you specify, like what you'd except if you think them like being similar to file permission bits. Rather they are hints for the type system and usually invisible at runtime.

In the same way, scopes do not actively prevent code from outside accessing the variables within. Rather they are hints for the compiler that these variables are associated with these bits of code, and usually on runtime they are just organized in most efficient way rather than enforcing the scope boundaries.

</comment><comment><USER10> Bonus question: can you get the example to print anything other than 5? The fact that the example prints 5 is an artifact of having allocated "a" on the stack. However, the compiler does not necessarily have to do that. If the compiler can determine that the pointee of "p" is undefined, you should be able to get it to print the value of whatever was previously in the register allocated for the pointee of "p" (which will probably be RSI on an x86-64 machine since IIRC the "cout" statement gets turned into a two-argument function call, the second of which is passed in RSI).

I'm not sure if any compiler will actually do this, though. They might just see that the address of "a" is taken at some point and refuse to allocate it to a register.

<comment><USER11> If you enable optimisation, you probably would see something other than 5.

</comment></comment><comment><USER12> Do people really find extended analogies like this helpful? If you have even a vague understanding of how computers work, it just seems confusing to me.

<comment><USER13> The pleasure for me in reading this extended analogy was making the parallels between the analogy and the computer equivalent, as I read.

For example, "someone might have replaced the nightstand by an armoire" (e.g., what used to be a Bar object is now a Foo), and "someone might be tearing up the book just as you walked in" (e.g., an asynchronous process may be destroying the object piece by piece, concurrently with your own execution).

</comment></comment><comment><USER14> My short explanation: every time you call a function, its vars get allocated on the stack. When you return from the function, you "pop" the stack, but all that means is that the stack pointer is now pointing to main. There is no reason to actually clear the stack memory as that would be a waste of CPU cycles. Therefore, if main() calls foo(), then foo() returns, the contents of the variables of foo() is still one frame higher on the frame stack and given the right memory address you can still access it.

As others point out, this is not something you should rely on. On the other hand if you are trying to overflow the stack or somehow break the program, this is definitely something to try.

The converse of this is that local variables of main() can be made accessibly to foo():

        void foo(int *x) {
            printf("a = %d\n", *x);
        }

        void main() {
            int a = 12;
            foo(&a);
        }

This of course makes sense: when you are in the middle of foo(), main()'s variables have to be stored somewhere and are accessible.

Edit: here's another fun way to get _a_ from foo():

        void foo() {
            int *x;
            x = (int *) (&x + sizeof(int));
            printf("a = %d\n", *x);
        }

        int main() {
            int a = 12;
            foo();
            return 0;
        }

<comment> T-hawk _Therefore, if main() calls foo(), then foo() returns, the contents of the variables of foo() is still one frame higher on the frame stack and given the right memory address you can still access it._

Unless an interrupt occurs between returning from foo() and reading those leftover stack variables. foo()'s abandoned stack space gets smashed by at least the return address from the interrupt handler, plus anything the handler itself pushes.

This falls into the class of use-after-free bugs. Like most instances of such, the technique works until something makes it not do so.

<comment><USER14> Great point! Yes, that's exactly what this is: use-after-free. That's why I am saying that this is useful when you are trying to somehow break the program, but not useful when you are doing constructive things. Presumably, when you are trying to break the program, you can run it multiple times, and chances are that at some point the interrupt will not happen.

</comment></comment></comment><comment><USER15> No. The code in question is invoking undefined behavour, making the question pointless.

<comment><USER16> It is often instructive and useful to look at the behavior of real implementations, not just the idealized behavior given by the standard.

<comment><USER17> When compiled with -O3 using g++ it returns 0 8. Compiler _will_ use undefined behavior to optimize.

<comment><USER16> There's a fun example with clang where you can have two pointers where:

        x == y

But:

        *x != *y

It involves invoking undefined behavior by using a pointer after it's been freed and arranging for a new pointer at the exact same location. Clang cached the contents of the old pointer and uses it in the comparison.

</comment></comment></comment></comment><comment> a-priori One thing it depends on, that I don't think anyone has mentioned, is the compiler's register allocation logic and how that interacts with the rest of the code in the calling function.

If, at the point you call the function, all registers are used, the following statement to retrieve the value may cause a register to be spilled to the stack. That may overwrite the data. That's more likely to happen on a register-poor architecture like x86.

</comment><comment><USER18> Short answer: maybe, but you shouldn't depend on doing that. Most compilers will even warn you about doing this exact thing, depending on their settings.

</comment><comment><USER19> The stack is a cheap/fast memory allocator. Upon return (out of scope for local variables) its freed. Don't point to freed memory.

</comment><comment><USER20> My instincts are that it's in stack memory, not heap, so there won't necessarily be a violation, and as you're not overwriting with anything (or making a new stack frame), sure the memory's still there and unaltered.

You can write all over your stack if you like. It's a pretty bad idea though.

<comment><USER21> Yeah, it looks to me like it should work up until you make another function call. Of course, that's assuming the platonic ideal of a memory model, which may not actually hold after the compiler, linker, loader, and memory paging have all had their way with it.

</comment></comment><comment><USER22> Yes, if you're an idiot. No, if you're not.

EDIT: okay, I'm getting downvoted. But the truth of the matter is, its _highly_ dependent on if the developer understands what they're doing. In both the cases where the developer knows, or the developer doesn't know, either way - accessing variables off the stack in this way, with a flying pointer, is pretty idiotic. Its not going to result in great software, people ..

<comment><USER23> You're getting downvoted because:

1) It's not a great insight in the first place. It's common sense and well known that you shouldn't access data this way.

2) It doesn't answer the question, which is about the mechanics (how does it happen?), not the quality of the programmer (what kind of programmer does that?)

3) It's needlessly insulting.

4) It's plainly wrong. It might be "idiotic" to access memory this way, but that doesn't mean that only idiots do it, either with intent (e.g to hack into something, or speed up some code with pointer arithmetic), or without (e.g by accident). It can happen (and it has happened) even to Dennis Ritchie.

<comment><USER24> Not Kernighan though. He'd never make a mistake like that.</comment></comment></comment>


For 20 Years the Nuclear Launch Code at US Minuteman Silos Was 00000000 - <AUTHOR> http://gizmodo.com/for-20-years-the-nuclear-launch-code-at-us-minuteman-si-1473483587#!

<comment><USER2> Discussion: [https://news.ycombinator.com/item?id=6819969](https://news.ycombinator.com/item?id=6819969)

<comment><AUTHOR> Thanks, I didn't see that.</comment></comment>


Why do game developers prefer Windows? - <AUTHOR> http://programmers.stackexchange.com/questions/60544/why-do-game-developers-prefer-windows <comment><USER2> As someone who has worked extensively in the PC games industry (programming lead on Warcraft, Warcraft II, Diablo, StarCraft, Battle.net, Guild Wars) the reason is quite straightforward: that's where all the users who buy games are. During my time at Blizzard the Mac versions of our titles sold ~4% of the PC numbers, though I expect those numbers have changed with the rise of Apple and, to a much lesser extent so far, desktop Linux.

Even with the rise of Linux -- and my belief is that it will rise very rapidly with the advent of Steam for Linux -- PC game developers have years and years of development experience advantage on the Windows platform.

When I and my two co-founders (all of us programmers) started ArenaNet to build Guild Wars in 2000 we considered *nix vs. Windows for the server platform and decided that we'd be more productive continuing to build on Windows based on our previous programming background. All of us had extensive experience with low-level coding on Windows (device drivers, async coding with IOCompletion Ports) and knew that it would take time to replicate that expertise on another platform.

Beyond the learning curve we knew it would be more convenient to be able to run the game server and game client on the same computer. During development I ran two copies of the Guild Wars match-making server, and two copies of the game client, on a single desktop box to test the matching algorithm code. Having to manage that process across multiple computers would have been more of a hassle.

On a personal note, I've been spending a lot of time working on building/using Linux in a virtualized environment (<https://github.com/webcoyote/linux-vm>). Linux is an awesome development environment! While I much prefer doing C/C++ development using Visual Studio, Linux is better for other programming languages I use or have tried: Ruby, Python, Go, D, and Erlang. And the ecosystem, with projects like Redis, ZooKeeper, Postgres and a slew of NoSQL servers makes it incredibly powerful because it isn't necessary to write everything from scratch (except SQL), as we did for Guild Wars.

<comment><USER3> Thanks for your insights, Patrick. I've heard nothing but good things about working at ArenaNet. Nobody has every mentioned whether that's due to your guiding hand or the fact that you left

<comment><USER3> Ugh. I'm getting downvoted for a tongue-in-cheek joke. :(

</comment></comment></comment><comment><USER4> Being a very experienced game developer who tried to switch to Linux, I have posted about this before (and gotten flamed heavily by reactionary Linux people).

The main reason is that debugging is terrible on Linux. gdb is just bad to use, and all these IDEs that try to interface with gdb to "improve" it do it badly (mainly because gdb itself is not good at being interfaced with). Someone needs to nuke this site from orbit and build a new debugger from scratch, and provide a library-style API that IDEs can use to inspect executables in rich and subtle ways.

Productivity is crucial. If the lack of a reasonable debugging environment costs me even 5% of my productivity, that is too much, because games take _so_ much work to make. At the end of a project, I just don't have 5% effort left any more. It requires everything. (But the current Linux situation is way more than a 5% productivity drain. I don't know exactly what it is, but if I were to guess, I would say it is something like 20%.)

That said, Windows / Visual Studio is, itself, not particularly great. There are lots of problems, and if someone who really understood what large-program developers really care about were to step in and develop a new system on Linux, it could be really appealing. But the problem is that this is largely about (a) user experience, and (b) getting a large number of serious technical details bang-on correct, both of which are weak spots of the open-source community.

Secondary reasons are all the flakiness and instability of the operating system generally. Every time I try to install a popular, supposedly-stable Linux distribution (e.g. an Ubuntu long-term support distro), I have basic problems with wifi, or audio, or whatever. Audio on Linux is terrible (!!!!!!), but is very important for games. I need my network to work, always. etc, etc. On Windows these things are not a problem.

OpenGL / Direct3D used to be an issue, but now this is sort of a red herring, and I think the answers in the linked thread about graphics APIs are mostly a diversion. If you are doing a modern game engine and want to launch on Windows, Mac, iOS, and next-generation consoles, you are going to be implementing _both_ Direct3D and OpenGL, most likely. So it wouldn't be too big a deal to develop primarily on an OpenGL-based platform, if that platform were conducive to game development in other ways.

I would be very happy to switch to an open-source operating system. I really dislike what Microsoft does, especially what they are doing now with Windows 8. But today, the cost of switching to Linux is too high. I have a lot of things to do with the number of years of life I have remaining, and I can't afford to cut 20% off the number of years in my life.

<comment><USER5> I'm a linux developer who's had an internship at a game company a few years ago. I had the opposite experience.

During my internship, there were problems with visual studio. Intelisense made everything so slow we had to disable it. VS was pretty slow and was hard to use without being fullscreen on a big monitor.

I use emacs and the gdb intergration is excellent. It's never slowed me down. I've customized it and find it painful to use another debugger (or an unconfigured gdb) so please don't have it nuked. When I develop under windows (without cygwin), I miss many tools I use when programming: valgrind, objdump, grep, sed. I also miss having more control over the compiler and linker. Makefiles seem to be much more powerful and flexible although more complicated then most IDE's projects. SVN and git are more complicated to use without the command line.

The game I worked on (deus ex human revolution) was being developed for PC, xbox360 and ps3. Developping for ps3 means that the code goes through gcc. This caused a few headaches for my colleagues as it is more rigorous with standards (new line at end of file gives a warning, templates need to have class or typename, etc). I was used to it and actually like the fact that it respects standards.

I've had to install windows 7 on a computer recently and was baffled by the fact the realtek ethernet, USB3, video drivers weren't included in the base windows 7 CD. Had I used the manufacturer's recovery option it might have helped but my computer would have been loaded with crapware. Ubuntu longterm support works like a charm on that computer.

From what I've written so far you might conclude that I'm a FOSS fanboy and dismiss everything windows has to offer. That's not it, I'm used to my tools and everything else seems slightly quirky to me. My tools aren't terrible and don't need to be nuked.

Most game developers have had many years experience developing for windows and use windows as their primary platform. Programming for linux is different, strange and possibly frustrating. I don't think the biggest issue with linux game developement is the quality of the tools available under linux but the fact that most game developers are used to using tools only available for windows.

The one thing I think is lacking for linux to be a viable game platform is quality graphics drivers but this seems to be improving with Valve's recent efforts.

TLDR: Using windows is just as quirky as using linux. The biggest difference is that you are used to your quirks as I am to mine. Most game developers are used to windows and switching to linux is hard and uncomfortable.

<comment><USER6> I've spent the last seven years working on video game middleware and have had plenty of experience to many development environments. I've spent years developing for Windows, Linux, and Mac OS, and worked on every console that has been available on the market in that time.

GDB is different, but it's different in a bad way. Jonathan is completely correct in that it's a much worse experience because it doesn't easily give you the information you need to consume in order to find the problem you're looking to solve. Using the text user interface helps considerably but it still gets in the way. Sure, seeing source is fine, but what if you want disassembly too? Mixed source/assembly? Register view? Watches? Switching between threads easily? Viewing memory? DDD is an improvement but it still feels like it's 8 years behind. I'm glad to hear you're productive in that environment, most people (especially most game developers) aren't, and based on my experience getting people up to speed and fixing problems it's easier to get them going on Windows than on Linux.

That said, it's not the worst though. Green Hills takes that crown by a country mile.

The SN Systems debugger for PS3 is the best one I've used, bar none. It gives you all the data you need, is responsive, and has a few really nice features (write memory region to disk).

Not quite sure why you used gcc for PS3, SNC is far superior. It's faster at compiling and generates both faster and smaller code.

Both sed and grep are available for Windows and are definitely part of my toolkit. Visual Studio comes with an objdump substitute (dumpbin). Valgrind isn't available but DrMemory (<http://code.google.com/p/drmemory/>), Insure++/Purify (expensive, but useful), Very Sleepy (<http://www.codersnotes.com/sleepy>), CodeAnalyst ([http://developer.amd.com/tools/heterogeneous- computing/amd-c...](http://developer.amd.com/tools/heterogeneous- computing/amd-codeanalyst-performance-analyzer/)), VTune (<http://software.intel.com/en-us/intel-vtune-amplifier-xe>), XPerf, and for video games especially, PIX, are all available.

<comment><USER7> >Sure, seeing source is fine, but what if you want >disassembly too? Mixed source/assembly? Register view? >Watches? Switching between threads easily? Viewing memory?

Disassembly: (gdb) layout asm

Mixed source/assembly: (gdb) layout split

Register view: (gdb) layout regs

Watches: There is no window, which is too bad. You can say "display foo" and it will print the value of foo each time the execution breaks. You can also say just "display" and it will print the values of all variables you currently have set to display.

Switching between threads: Say "info threads" to show all the threads in your application. Say "thread x" to switch to thread number x.

Viewing memory: Again, there is no window, which is too bad. You can, however, use the "x" command, which is pretty full-featured and allows you to print the contents of a given-size chunk of memory, starting at a given point to the console in pretty much any format you might desire.

You may already be aware of these features, but be discounting for some reason?

Edit:

Turns out, GDB also supports writing memory regions to disk:

(gdb) dump binary memory <outfile> <startlocation> <stoplocation>

</comment></comment></comment></comment><comment><USER8> It's a really stupid question (but this does not take away from the value of the incredible first answer). It makes a huge, blind assumption (running on Windows means using DirectX and explicitly not OpenGL) and ends up assuming correlation implies causation.

There are many Windows-only games written in OpenGL, and the ones that are written with DirectX is not necessarily because DirectX is better but because there are more consumers for Windows.

The short and simple answer is that "real," modern games are ridiculously expensive projects. The highest percentage of PC-gamers can be found (at the moment) on Windows. Ergo, you will write Windows games and use libraries (OpenGL, DirectX, or otherwise) that are available on that platform.

<comment><USER9> As someone who's never done any game development at all, can you give me some sense of the work that would be involved to port a Windows-only OpenGL game to Mac or Linux? What pieces of it would need to be redone or significantly overhauled?

I would have expected it would be quite minimal compared to the work involved in developing the game itself, but I guess I must be wrong if there are "many" Windows-only OpenGL games.

<comment><USER10> Sound. Networking. Decent async file I/O. Threading libraries. Dynamic loading of components. Anti-cheat techniques (or any other security stuff you might need). Device input. Choosing and supporting a platform (and the follow-on customer support issues). Diagnosis of customer problems (because they _will_ have them).

<comment><USER11> Sound: OpenAL abstracts this decently. If you're not using it or an equivalent, you're doing it wrong.

Networking: Most folks building a bespoke networking layer seem to go with ENET, which is cross-platform.

Async file I/O: yup.

Threading libraries: something wrong with Boost Thread? (Boost gets coroutines, too, in 1.53, which I'm pretty excited about.)

Honestly, the biggest problem I see in writing a cross-platform game is device input. Trying to build a joystick/gamepad-based game for Linux and OS X are pretty painful. Fortunately I've lucked onto GLFW as a windowing toolkit, which handles the HID Manager boilerplate and other badness for them.

<comment><USER12> You can also just use the sdl, which provides abstractions for network, sound, graphics, and input. If you hit snags, you could just commit back the fixes to sdl proper. I've used it a bit and I have had good experiences so far with successful cross platform builds.

It also supports Android, so in theory you could almost have one code base with only a UI and input revamp for Android target every PC os.

<comment><USER11> SDL is a thing, I guess, but I personally have little use for it. I mean, I've tried it, of course; I'm sure most people have. But, and maybe it's just me, but if I'm going to have to do the legwork of wrapping some C API into a decent, lifecycle-manageable object model, I'm probably going to use the lowest-level one I can so I can state with authority that I fully understand what everything in my stack is doing at all times. Like, OpenGL's C API is super gross, but only very slightly less so than dealing with SDL. And while, sure, "you can commit the fixes back to SDL," you first then have to go unwind their abstraction to actually understand what the hell it's doing--which for me, given the relatively small feature set I need, is almost as much work, if not more, than writing it yourself.

Also, SDL 1.x is LGPL (instant dealbreaker, I build with static libraries on a Mac to avoid dylib hell) and SDL 2.x isn't done. So there's that, too.

In the spirit of abstraction and not having to build the object model I'd get for free with Direct3D, I used SFML for a while; the general idea of it is promising, but the abstraction is janky, it's desktop-only, and I still have a bitter taste in my mouth from the way they handled showstopper bugs in SFML 1.x as far back as three years ago: "Completely reproducible crashes on all modern ATI cards? Just upgrade to our incompatible 2.x alpha!". (2.0 still isn't out, which makes it _super_ groovy.)

.

I now use GLFW for windowing/input, ENET for networking, and PhysFS for I/O; I can pretty easily use each of them in a way that maps pretty well to my own preferences for an object model and a mental model. Probably not scalable (for a multi-person project or a 3D game I'd almost certainly use OGRE rather than doing it myself), but nice for my purposes.

The only part of my codebase that isn't pretty trivially platform-independent right now, without any special effort, is in "platform.cpp", which does the tremendously difficult work of finding me the user directory and the appdata directory. =) I sure haven't done anything special to make it build both in Xcode (my primary environment) or Visual Studio.

<comment><USER13> OTOH, SDL2 is developed by Sam Lantinga, currently an employee at Valve (IIRC), so this is probably the most promising library of the three you mentioned.

For one, it [SDL2] uses XInput2 for relative mouse input on X11 (and Raw Input on Win32), which is soooo much better than the classic WarpPointer mess.

Another thing, it is really preferable to put libSDL shared library next to your executable, not compile it statically, at least for Linux builds. Quite a number of problems with old games running improperly on erm...modern Linux desktops are solved by swapping the bundled libSDL for distro-provided version.

I'm speaking specifically about windowing/input part of SDL, have zero experience with other parts.

</comment></comment></comment></comment></comment></comment></comment><comment><USER14> Because OpenGL is ugly as hell. DirectX is rewritten often (with new versions) to accommodate new ideas, whereas OpenGL new features/ideas are just "tacked" onto the existing code base.

OpenGL also has a huge barrier to entry compared to DirectX.

MSND DirectX resources are fantastic, whereas resources on OpenGL are often out-dated and generally pretty crap.

DirectX requires the DirectX SDK, whereas OpenGL requires GLUT, or GLEW? I think. Perhaps FreeGLUT? OpenGLUT? Or can you just use SDL? Or none of them? What? Exactly.

<comment><USER15> I've heard this same sentiment from numerous programmers, including many who prefer Linux. I'm thinking this is probably an informed opinion, not an uninformed one, and should probably not be in the negative in votes.

<comment><USER16> Frankly, complaining that developing for Direct3D requires just the DirectX SDK, and that developing for OpenGL requires some combination of other libraries is a stupid complaint. It's the kind of complaint that only complete newbies might have - anyone with any idea about what they're doing will not have a problem with it.

Not that it's hard, anyway. You don't need any actual libraries to use OpenGL. You just need up-to-date headers, and a way to link to the system's OpenGL library. The easiest way to get those is to use an extension loading library, which provides those headers, links to OpenGL at run-time (same thing that Direct3D does) and makes all of the available extensions available automatically.

Complaining about libraries like GLUT, GLFW, or SDL is completely irrelevant. If you were using Direct3D, you'd be writing windowing code directly on top of the Win32 API, which you can still do with OpenGL. If you want to use one of these libraries to handle the platform-specific windowing and OpenGL setup, you can. You don't have to - even in portable games, you can still just write your own platform-specific windowing and OpenGL setup code.

So the development setup and libraries are different. So what? It's fairly simple to work out for anyone but a complete beginner. On platforms like iOS or Mac OS X, OpenGL is actually trivial - everything you need is included in the platform's SDK. Same with Android. Same, to an extent, with Linux. OpenGL is only really awkward on Windows, and you can guess who's to blame for that.

But there are plenty of legitimate complaints about OpenGL.

The API is much more complex than Direct3D. There are dozens of ways to do things, with no way to tell which is the best way (short of looking at what Direct3D is doing, and copying that). Behaviour and performance is inconsistent between driver vendors, versions of driver from the same vendor, and across platforms. Some OpenGL drivers (Intel's on Windows, until very recently) are effectively unusable, or don't expose all of the hardware's functionality that Direct3D does. There are lots of legacy issues to carefully creep around, and they can still bite you even if you're not using the legacy features. The shader compilers aren't consistent between different vendors, and are often incredibly slow. Linking shaders is kind of clumsy. Since the API and drivers are much more complex, it's more common to run into severe performance issues caused by the driver than it is with Direct3D (and consoles are better than Direct3D in this regard, because their graphics drivers are so thin that they essentially don't exist).

Even picking a decent subset of OpenGL to use is a pain. Do you use OpenGL 2.x and ignore large chunks of it to get a reasonable API, and broad support? Do you go for OpenGL 3.x or 4.x instead? Which version? Which set of extensions? It's dead easy for OpenGL ES, though - 1.x (fixed function) or 2.x (shaders), neither of which carry around the legacy crap that OpenGL still carries.

Dealing with all of that is the problem with using OpenGL, not working out how to link to it.

Oh, and documentation. That really is shocking, mostly because the majority of documentation or guidelines you might find are written for OpenGL 1.x, and are completely obsolete.

There are some good beginner-level guides to getting started with modern OpenGL:

<http://www.arcsynthesis.org/gltut/> (OpenGL 3.3) [http://duriansoftware.com/joe/An-intro-to-modern- OpenGL.-Tab...](http://duriansoftware.com/joe/An-intro-to-modern- OpenGL.-Table-of-Contents.html) (OpenGL 2.0, not using the legacy stuff)

<comment><USER17> I would also add <http://open.gl> (OpenGL 3.2) to the list.

<comment><USER18> I would also add the other links in the right-hand side bar of the OpenGL sub- reddit: <http://www.reddit.com/r/opengl> \-- all good resources.

<comment><USER17> Awesome stuff, thanks!

</comment></comment></comment></comment></comment></comment><comment><USER19> > Old John Carmack at Id Software took one look at that trash and said, "Screw > that!" and decided to write towards another API: OpenGL.

"Old John Carmack" makes me think he's some sort of half-myth crazy coot mountain man, which made me realize something: There will some day be mythology about computer programmers.

 _Whoa._

<comment><USER20> If you mean one day people will remember the names of programmers in a mythological manner, I doubt it. If you mean there will exist a mythos of programmers. Their persons. Their ideals. Their exploits.

There are books: "Dealers of Lightening", "What the Dormouse Said", "Hackers: Heroes of the Computer Revolution"; and beyond them a large amount of information available only online ( textfiles.com is fantastic ). Things like 2600 and phrack. All of the old 'zine releases made by various cracking groups, like "Legion of Doom", where at this point all that remains are various communiques thanking lists of pseudonyms that will likely never be linked to actual names. Older stories, like Mel. The Woz's hacks and Gates' angry letter to early software copiers. The lexical analysis to pin n3td3v as Gobbles Security ( still unconfirmed afaik ). Some of the older bits by related groups, such as phreakers, aren't necessarily programming mythos, but fall into the same crowds and history folders, individuals like Captain Crunch. There are Torvalds and Tanenbaum's humorous exchanges. The first worm. utf8's placemat birth. Larry Wall's idiosyncrasies. Well, all programmers idiosyncrasies. esr. rms. dmr. ken. Anyone else that can be identified by a tla, plus or minus an underscore prefix. Hacker ethic, free software and open source manifestos, deconstructions, apologies, rebellions and dismissals aplenty. Hackers v crackers and demoscene's birth from the latter. Spacewar, nethack, rogue and a thousand MUDs to idle your time away. Many other things that haven't popped off the top of my head.

There won't some day be a mythos such as this. It is here now. And it will only grow further.

</comment></comment><comment><USER21> One reason is just that since game development is mostly all windows based, new programmers learn to use windows tools.. and thus become more experienced with them and not wanting to switch to something completely new which would require a loss of productivity.

Also, and that's really only based from my experiences, it seemed to me that game developers aren't that much into "hacking" linux. Things should just Work. The terminal is a deprecated tool compared to new intuitive IDE. Most of you won't agree with these statements (And I clearly don't) but that's really what I've felt every time I'd talk with a game developer friend or colleague. And, this mentality goes back to when I was an engineering students.. While I had fun learning linux and Python, friends graduating in video gaming would laugh of Python for being a "scripting non-performant language" or they would play around in visual studio with C# and making forms or build some games with XNA.

So, sometimes I think it's not that much about linux not being "good enough" but more about video game developers' mentality to not fit with it. Man, I won't lie, I'm an experienced Linux developer and user and I always have to lurk in all kind of forums and RTFM on every small things that needs to be installed (which is not in the standard library). And, it often happens that I break stuff and spend countless hours trying to fix it. Hell, even last week, I've upgraded a server on Archlinux and it totally broke my system without any warning. I really needed help so I went on #archlinux and I've been told that I should have read the archlinux news before tempting an update. Fair enough, I guess.. but I can understand that on a extremely tight schedule, games developers can't waste time on stuff like that. Compared to say, [next] [next] [finish] windows install where everything just Work.

Please, don't down-vote me if you don't agree with things I've seen from my experience. I don't agree with it neither, but I thought I'd share it here. It's really something I see coming again and again from all kind of different video games programmers.

<comment><USER22> As a games programmer with coming up to 5 years experience, I can attest that this is largely true. At every studio I've worked at, I've been given strange looks for even opening a terminal, and half of them haven't even heard of Vim. Regardless of what the actual strengths and weaknesses of the tools are, most game developers are so heavily wedded to VS and Windows that there is a huge inertia on that side.

Personally, the mobile game that I'm developing now is being developed entirely under Linux with GCC and GDB, and although GDB has a bit of a learning curve I now find it easier and quicker than VS.

</comment></comment><comment><USER23> As 2D video game developer with many titles under my belt, I can assure you it's simply a matter of market share. The general rule (before hybrid CDs) was write it for Windows and if it sells, then write it for Mac (later we would release both Windows and Mac on a hybrid CD).

Traditionally Linux was all over the map in terms of graphics, and market share was nil. Nowadays, Linux is prevalent among computer geeks, but in the general population (that have the real $) it's effectively nonexistent.

TL;DR - Follow the money.

<comment><USER24> Well, most game development happens for consoles - so if the question is "Why game developers use Windows" not "Why PC game developers use Windows", then it still is an interesting quesion.

If you're coding for PS3 or Wii, why is Windows better than Linux or Mac? Marketshare doesn't explain that.

<comment><USER11> The tooling is generally better on Windows, or was. A buddy of mine who does some pretty intense PS3 work switched to a Mac about a year and a half ago and said that it was rough going when he'd tried a year or so before that.

</comment></comment></comment><comment><USER25> ..and then another decade passed and OpenGL ES won every growth market, returning PC gaming to its niche status. Massive niche, of course, but niche. More Temple Run, dears?

<comment><USER26> Only on mobiles and we have to thank the iPhone for that.

Before the iPhone there were only crappy 3D apis available, OpenGL done with software rendering,the J2ME 3D Mobile API and even the PocketPC had brain dead versions of DirectX.

As for the game consoles, it is a myth in the FOSS that they use OpenGL.

Except for the PS3, which has OpenGL ES + CG, most consoles not from Microsoft have an OpenGL like API, which is not the same thing.

As for the PS3, most developers actually make use of the proprietary CGM API.

<comment><USER27> Browser-based 3d is all going to be WebGL, which is very OpenGL ES inspired.

<comment><USER26> With MS-DOS games quality, no thanks.

</comment></comment></comment></comment><comment><USER28> Game developers target Windows because it's(was?) popular. They'll target mobile devices more and more alongside consoles more and more (although, that line is already starting to blur).

Users gravitate toward what's available, what's usable and if possible what has the most vibrant ecosystem of apps. Games, if the developers want to make any money, will target that platform. If the apps are common on a specific platform, then it stands to reason tools for developing other apps/games will also be common on that platform.

</comment><comment><USER29> I would think the answer is a mix of "because that's where the money is" and "because that is the OS they run themselves"

</comment><comment><USER30> One of my friends is a gearhead, this is what he had to say:

"...Shader Model 1.1, which basically was "Whatever the 8500 does."" Correction - it was Shader Model 1.4 The GF3 already did 1.1, and the GF4 Ti (3 years later) did 1.3.

A very good read though. A decade of drama put into simple words.

</comment><comment><USER31> One of the most entertaining/educational answers I've read on programmers SE. Fantastic!

</comment><comment><USER32> Mac has outdated OpenGL. Period.

<comment><USER26> Full with Apple specific extensions.

</comment></comment><comment><USER33> They closed the question. It irritates me that the self appointed stackoverflow police are very quick to close questions. They barely give them a chance to see if something good or creative comes a long. (Such as the first comment)

</comment><comment><USER34> its all about the benjamins...

</comment><comment><USER35> pkg-config and autotools!

<comment><USER36> Just pkg-config for me, thanks.

</comment></comment><comment><USER37> Games are already being ported to other operating systems because of microsoft greed.

MS wants to copy everybody with an app and game store, which will be the only authorized way to download and install anything on to windows 8+

They also want to charge 30% to any vendor that wants to sell in their store. Since game makers like Steam have their own content delivery system which will be blocked by MS they already panicked and announced a new linux client and have claimed to be committed to switching everything over the next few years and dumping windows

<comment><USER38> "which will be the only authorized way to download and install anything on to windows 8+"

No, you can install any windows application on Windows 8. Windows 8 != Windows Store. The desktop is only click away from the Start Screen (which can be completely removed, if needed, using a free application) and remains as flexible as on Windows 7.

ie. Steam will work fine on windows 8 as on Windows 7.

<comment><USER37> The CEO of Steam Gabe Newell disagrees with you. They (and Blizzard) are moving away from Windows 8 entirely.

Steam is coming out with it's "steam box" which is a linux run gaming and home entertainment system. You can also run windows on it if you want it's not a proprietary console device apparently.

There are articles everywhere how Windows 8 completely killed the PC gaming scene

<comment><USER38> Whether he agrees/disagrees won't change the fact, which is, Steam runs on Windows 8 and it runs fine. There are a lot of reasons not to support an OS besides compatibility.

With Steam, it wasn't a compatibility issue, it was more to do with Valve feeling threatened by the Windows Store Model. Giving away X of every purchase to the store does undermine their profit model. The same reason why you won't see subscription based products such as Dropbox/Google Drive/Skydrive with upgrade options on the Apple Store.

However, I can't see how Windows 8 threatens the traditional form of sale, that download to desktop and play.</comment></comment></comment></comment>


MSG-4, Europe's latest weather satellite, delivers first image - <AUTHOR> http://www.esa.int/spaceinimages/Images/2015/08/MSG-4_Europe_s_latest_weather_satellite_delivers_first_image <comment><USER2> [https://www.flickr.com/photos/eumetsat/19667653813/sizes/l](https://www.flickr.com/photos/eumetsat/19667653813/sizes/l)

"Original (16672 x 9378)" :)

<comment> Ono-Sendai Original size crashes my chrome tab :)

<comment><USER3> when it starts loading the image right click on the image and then Save As. Chrome will crash but the picture will be downloaded(30MB+)

<comment><USER4> Direct link: [https://farm1.staticflickr.com/265/19667653813_94a68f5644_o....](https://farm1.staticflickr.com/265/19667653813_94a68f5644_o.jpg)

<comment><USER2> Preview on OS X works surprisingly well with a giant JPEG like this. It seems like its doing clever stuff(tm) when decoding the image for various zoom levels.

Chrome should (I mean.. it doesn't, but it really should) do this as well.

</comment></comment></comment></comment></comment><comment><USER5> Is there a (rather) easy way to obtain the MSG-4 images using SDR like it is possible for NOAA and Meteor-M N2 ([http://www.rtl-sdr.com/rtl-sdr-tutorial- receiving-noaa-weath...](http://www.rtl-sdr.com/rtl-sdr-tutorial-receiving- noaa-weather-satellite-images/))?

<comment> iso8859-1 Meteor-M N2 is in polar orbit, so you may need a fancy antenna to receive MSG, which is in geostationary orbit (don't quote me on this, but this reddit user has the same suspicion [https://www.reddit.com/r/RTLSDR/comments/23pquc/can_you_rece...](https://www.reddit.com/r/RTLSDR/comments/23pquc/can_you_receive_geostationary_weather_sattelites/ch1roen)).

But EUMETSAT (contractor of MSG-4) has EUMETcast for distributing the images: [http://satsignal.eu/wxsat/atovs/index.html](http://satsignal.eu/wxsat/atovs/index.html) That works over DVB though, which would be disappointing for you since you wanna talk to satellites.

There is a library for decoding the proprietary formats: [https://sourceforge.net/p/meteosatlib/wiki/Home/](https://sourceforge.net/p/meteosatlib/wiki/Home/)

The linked Reddit thread has this very nice answer: [https://www.reddit.com/r/RTLSDR/comments/23pquc/can_you_rece...](https://www.reddit.com/r/RTLSDR/comments/23pquc/can_you_receive_geostationary_weather_sattelites/cgzy6te)

<comment><USER6> Live stream encrypted and six hour delay for unencrypted, am I reading that right?

</comment></comment></comment><comment><USER7> To the best of my knowledge, this thing takes snapshots of its viewing field every 15 minutes. That'll be tremendously helpful for calibrating atmospheric and ocean models of ecosystem dynamics.

<comment><USER8> And Japan recently launched another satellite with the same interval and resolution!

<comment><USER7> Similarly, the South Koreans have a geostationary satellite (GOCI) [0]. It's sampling interval is a bit lower (3 hourly) but has a high spatial resolution (500m).

[0] [https://en.wikipedia.org/wiki/Geostationary_Ocean_Color_Imag...](https://en.wikipedia.org/wiki/Geostationary_Ocean_Color_Imager)

<comment><USER8> The sampling interval of the Japanese and the European satellite is really interesting, though, because it allows to view more than half of earth in 15min intervals. We can see live the movement of clouds and typhoons around the earth.

This is really powerful.

</comment></comment></comment></comment><comment><USER9> The linked page shows an image of the complete Earth. Is that really the viewing angle of this satellite?

<comment> iso8859-1 Yes, it is in geostationary orbit.

<comment><USER10> So it's not a composition? It's exactly 10am UTC everywhere in this picture?

<comment><USER11> I think what iso8859 is trying to say is that a geostationary orbit is very far, so it's still a narrow angle, as illustrated here:

[http://stream2.cma.gov.cn/pub/comet/SatelliteMeteorology/GOE...](http://stream2.cma.gov.cn/pub/comet/SatelliteMeteorology/GOESRBenefitsofNextGenerationEnvironmentalMonitoring/comet/goes_r/envmon/media/graphics/goes_orbit.jpg)

No composition required.

</comment></comment></comment></comment><comment><USER12> Anybody know what frequency + modulation this thing broadcasts? Any hope for a little radio + twin helix antenna to pick up images?

</comment><comment><USER13> While joesoap's comment on the article page is hilarious, it made me think - are there any technological issues to providing (nearly) real-time low-res video feed? It would be scientifically useless, so this is more of a theoretical question about the tech/physics involved.

</comment><comment><USER14> Am I imagining it or does North Africa look dryer than it did in Apollo era photographs?

<comment> stargazer-3 If you check the caption you'll see that it's an infrared color image (except for the blue channel, which is in red 600um). Therefore the picture is probably more sensitive to the surface temperature variations, and, consecutively, North Africa might look dryer indeed.

<comment> Y-bar This.

Also, the precipitation since the late sixties in the area surrounding the Saharan desert has been below average, leading to desertification ([http://oceanworld.tamu.edu/resources/environment- book/desert...](http://oceanworld.tamu.edu/resources/environment- book/desertificationinsahel.html)):

> Years of above average rainfall from the 1950s to the 1970s, were followed > by drought in the sahel starting in the late 1960s. The drought has had a > devastating impact on this ecologically vulnerable region and was a major > impetus in the establishment of the United Nations Convention on Combating > Desertification and Drought.

So, during the 1960:s North Africa probably looked extra lush because it had experienced over a decade of above-average precipitation.

</comment></comment></comment><comment><USER15> This has to be the sharpest picture of earth I have seen...

<comment><USER15> You can see a lot of jagged edges on the left side of the higher resolution image: [http://www.esa.int/var/esa/storage/images/esa_multimedia/ima...](http://www.esa.int/var/esa/storage/images/esa_multimedia/images/2015/08/msg-4_europe_s_latest_weather_satellite_delivers_first_image/15547768-1-eng- GB/MSG-4_Europe_s_latest_weather_satellite_delivers_first_image.jpg)

<comment> stargazer-3 Good catch! But I think the jagged edges there result from an arbitrary clipping of the brightness values, done to remove the "noise" pixels, i.e. to make the space look darker. If that's the case, it isn't the resolution that's to blame - just a post-processing (for public release) issue.

</comment></comment></comment><comment><USER3> Chrome crashes on me when I try to open original photo

</comment><comment><USER16> Really, the weather satellite delivered a 1.4M JPEG?

<comment><USER8> No, it delivered a 34M JPG [https://farm1.staticflickr.com/265/19667653813_94a68f5644_o....](https://farm1.staticflickr.com/265/19667653813_94a68f5644_o.jpg)</comment></comment>


Very Cool 3D Sketching Program - <AUTHOR> http://rhondaforever.com/ Video on the homepage shows an example of using it and some sample drawings.  This blew my mind when I first saw it. <comment><USER2> The content creation space is ripe for disruption.

"AAA" games are completely art bound. They are the limited by production pipelines, not game engine technology. The price of artwork greatly outweighs all other costs. Game Studios don't have the resources to innovate here, so we need people commercializing tools like this. ZBrush and its clones have effectively reinvented the creation of detailed character models. We need to help make artists more productive if we want to realize the next major leap in graphical experiences without worrying about all of our most talented studios going bankrupt trying to keep up.

I know this space well, but I just don't have the math strength. It's going to take a very special type of hacker, but someday stuff like this will mature. Artists will wonder how anyone ever created a movie or game without it.

<comment><USER3> ZBrush is amazing, but its interface is terrible. As a customer, I am very grateful with their free upgrades, but as a user I loath trying to figure out which buttons I need to avoid in order to not lose all my work (dropping tool to canvas, i'm looking at you.) For texturing, zbrush is amazing and really is an order of magnitude better (imho, my artist/friend prefers manual editing in photoshop because of the tools available in that context.)

Anyway, thats a long way to say that part of what is going to make tools development really improve is going to be making it a) easy to get started and b) fastfor expert users. Modern 3d software focuses on (b).

Definitely not an easy problem, but a fun one!

(Also, math isnt as hard as you think, just takes time to get progress on.)

<comment><USER2> ZBrush is a great iteration story. The first versions were for "painting with depth" and when they realized the value in their tools for painting on models, they developed, iteration by iteration, modeling, sculpting, texturing, etc. The legacy of that iteration can be painful in points (dropping tool to canvas is only one such example :-)

As for the math: yeah, tell me about it. I do a lot of 3D game work. I've become quite comfortable with transforms, most quaternion stuff, and boat loads of vector math. However, it took me many, many years to get it down! And I don't really enjoy it that much. I find it tedious and frustrating when all I really want to do is work on the game play logic. That's why I'm not volunteering to disrupt this particular industry...

</comment></comment></comment><comment><USER4> Pretty good... Looks like it makes it easy to put together wire models, where each wire is composed by drawing curves in the view plane.

I still have a soft spot for Teddy, though, which is a solid modeler with a great gestural interface:

<http://www.youtube.com/watch?v=e2H35SlLmUA>

<http://www-ui.is.s.u-tokyo.ac.jp/~takeo/teddy/teddy.htm>

<comment><USER5> You know, first thing that came to my mind when I saw the title of the news, before even opening it, was that I should post a link to teddy! This was a land before time of zbrush and mudbox. It was a land of new horizons with nichimen (ex symbolics graphics division) leading the way of the new technologies in modeling. That was a great time to witness. And to think of LISP being behind it all...

As far as OP goes - StudioTools has a more powerful workflow similar to this for ages - <http://www.youtube.com/watch?v=mQ6Ij2-V_O8>

</comment></comment><comment><USER6> <http://pitaru.com/> < creator's website includes many other innovative projects

</comment><comment><USER7> Personally, I cannot wait till more can be done in 3d space using your hands. It's going to be amazing to be able to set down the wacom tablet and mouse and and interact 1:1</comment>


X-Ray Audio: Soviet-era bootleg audio recordings - <AUTHOR> https://www.x-rayaudio.com/ <comment><USER2> Vladimir Vysotsky was a popular singer during this time period and while the state run music publishing house did not publish his music, it was still widely available in this format.

E.g. a quote from

[https://www.newworldencyclopedia.org/entry/Vladimir_Vysotsky](https://www.newworldencyclopedia.org/entry/Vladimir_Vysotsky)

"This was also the height of his popularity, when, as described in Vlady's book about her husband, walking down the street on a summer night, one could hear Vystotsky's recognizable voice coming literally from every open window. Unable to completely ignore his musical phenomenon, Melodiya did release a few of his songs on disks in the late 1970s, which, however, constituted but a small portion of his creative work, which millions already owned on tape and knew by heart."

<comment><USER3> Vladimir Vysotsky is my father's favorite singer. He (ex military from Bulgaria) used to go an train with soviet forces every summer (in some desert). But pretty much he grew up anti-establishment, listening to rock, heavy metal, and illegal vysotsky recordings (the ones soviet government would censure).

One summer he came back with casette and some authentic recordings from him, but then my sister decided to sing Michael Jackson and have recorded her own singing over the casette :) - so it's all lost, but he's able to find now lots of material.

It's interesting, how he really loves russian culture, was military, but despised communist, and oppressive regime. To this day he plays (maybe even now) the IL-2 sturmovik game, where with his german, russian, ukranianian, bulgarian and other buddies re-enacts the World War II period in flight (he was in the Air force, and I'm glad that he was never ever to become a pilot (due to his vision), as lots of folks from his age died in these planes, some fathers of kids I was in school...)

</comment></comment><comment><USER4> Related from 6 months ago: [https://news.ycombinator.com/item?id=20221047](https://news.ycombinator.com/item?id=20221047)

2017: [https://news.ycombinator.com/item?id=14939295](https://news.ycombinator.com/item?id=14939295)

2015: [https://news.ycombinator.com/item?id=10724639](https://news.ycombinator.com/item?id=10724639)

</comment><comment><USER5> Music on bones... Now it sounds like a joke, but for some people, who were thrown to jails for selling this stuff on Soviet's black market, it sounds literally.

</comment><comment><USER6> wow had to check out the site to understand literal x-ray plastic things cut into circles then used to record audio like a record huh</comment>


Startup Sunset - <AUTHOR> http://chromemote.com/blog/startup-sunset

<comment><USER2> It's pretty annoying when a page automatically opens up a new tab to direct you to download their Chrome extension.

<comment><AUTHOR> I agree. Sorry, that was unintended. Fixed now. Thanks for the heads up.</comment></comment>


Ask HN: What do you wish Microsoft was doing better re: web? - <AUTHOR>

It's been too easy to criticize Microsoft on IE - but they're working on fixing that now (moving to continuous updates for Spartan) and seem to be engaging more with the community (Visual Studio Code seems more like Atom than Visual Studio). What other things do they need to work on / promote / think about / talk about / preach / practice / think through re: web & JS? <comment><USER2> The main thing I want from Microsoft is for .NET to be fully cross platform.

There have been some significant strides, but what I would love is for Microsoft to effectively come out and say "In x years time, .NET and Visual Studio will both run on Windows, Mac, and Linux".

Naturally, ports aren't really possible, but enough of Visual Studio could be ported with a Mac/Linux custom UI; just enough for there to be some kind of native-feeling experience across each platform.

I'm a .NET dev by day, and I absolutely love the ecosystem, but I dislike the idea that all C# developers work in enterprise, or on huge projects. So far, as a .NET dev, I've worked in one startup and two small agencies. I could probably spend the next decade working as a .NET dev in small companies without ever touching an enterprise code-base.

Building in Windows is fine, but you often feel like an imposter for working on a completely different OS to everyone else. Ultimately, if .NET was fully cross-platform I'd probably move to Linux, but I feel that if other OS's were embraced Windows would improve tremendously.

</comment><comment><USER3> Get Microsoft Exchange to interoperate with other mail clients like Mozilla Thunderbird. The biggest challenge I find working on the Microsoft Development/Enterprise stack is vendor lock-in. Of course, that is where they make their money but it's also what I find most challenging. It's easier to start-off on an open stack and pivot into something else than with MS - so now I avoid MS and other enterprise solutions unless it is overwhelmingly necessary.

</comment><comment><USER4> A big issue for me is the completely unnecessary size of most of the products they provide. Why are SQL Server, Visual Studio and Windows itself so big? It takes almost no time at all to provision a dev environment on Linux but hours on Windows for the same result. A concerted effort to slim down their tools and OS is needed IMHO.

</comment><comment><USER5> Make Edge cross platform and open source it. Its annoying to have a browser that is locked to a specific OS yet may potentially be used by many in the future.

</comment><comment><USER6> I am part of community and Visual Studio Code is definitely NOT what I want.

Gradually reducing investment in JS and TS and focusing on WebAssembly and related C# pipeline would be a great start.

Microsoft developers are mostly enterprise. JS is not what we like.

They are literally not listening to the voice of community: look at top UserVoice dev requests - no definite answer after _years_ of silence [http://visualstudio.uservoice.com/forums/121579-visual- studi...](http://visualstudio.uservoice.com/forums/121579-visual- studio/filters/top)</comment>