Hacker News new | past | comments | ask | show | jobs | submit login

What's holding .Net back is a lack of the vision thing. That's a shame, since in many ways it is a better designed framework, with a superior flagship language (C#) compared to the Java platform. Their framework and language designers are truly world-class, probably the best in the world.

The problem with .Net's vision has been painfully obvious to anyone following .Net over the years - it is still Windows First. While in Enterprises and Startups [1], Linux is what matters on the Server.

As an example, just last week I was looking for some http2 libraries in C#. Go and Java have mature libraries already in production, while .Net only supports http2 services on Windows. That in turn affects other ecosystems as well, such as gRPC Services. This to me is a red flag. Given how important something like http2 was going to be, how come Microsoft is so late to the party? What exactly is .Net's niche, given front-end wars are over?

Another example, the very promising CoreRT project (https://github.com/dotnet/corert) page says this about Linux: "Same as Windows, the libraries are less complete."

As a late comer, .Net faced an uphill climb. High-end web tooling is almost exclusively JVM based (Kafka, Cassandra, Elastic Search, Kibana etc). The upcoming competitor is Go, not .Net. If Microsoft doesn't pour a billion dollars into getting .Net ready for Linux in 2018, .Net is over.

[1] I've been a consultant to several Small and Medium sized businesses (especially in Medical) which predominantly use Windows and .Net, and that's still a huge market. But even they are looking to move off Windows.




It's definitely not dead.

.NET runs everything from desktop apps to web infrastructure to mobile games - it's a lot more encompassing than building some websites. It also integrates into a vast ecosystem with Office, SQL Server, Active Directory and is backed up by the fast-growing Azure Cloud. Most small, medium and 100% of the Fortune 500 run on .NET code and services.

HTTP/2 is just not part of Kestrel yet, which is the default new .NET Core web server. You can always use other libraries and this doesn't affect GRPC at all (which can easily generate the server from .proto stubs).

And how are the front-end wars over? Asp.net has great integration with all these modern JS frameworks, along with MVC and WebForms which are both still viable and used often. Why does there need to be a "niche" when .NET already does far more?

It seems like you found 1 missing feature and are proclaiming it a failure when the reality is that it's one of the most common frameworks today, and now also runs great on Linux. It'll be around for decades.


> everything from desktop apps to web infrastructure to mobile games

AKA mobile and Windows.

.Net is cross platform on mobile. Outside of it, if your project ever need to run in anything that isn't Windows, or communicate with anything that isn't Microsoft, then you can't use .Net. That makes it fit for enterprise CRUDs and not much else.


I'm not really sure what you mean by "Communicate with anything that isn't Microsoft, then you can't use .Net" I've used .net to communicate to vast array of non-microsoft products, serial over usb, shared pipes, com-interop, services, message buses, webapi etc..

I mean it is honestly by far the best framework I've uses to communicate to everything from 40 year old hardware to modern web services and APIs.

As far as "run on anything that isn't windows" I'll grant you, that's a very emerging area, but you can run .net (or some flavor it) on a lot of different platforms.

Hell I've got a raspberryPi running windows 10 IOT with .net running on it, and it works like a top.

And statements like "If Microsoft doesn't pour a billion dollars into getting .Net ready for Linux in 2018, .Net is over." say's to me, you don't really have your finger on the pulse on the enterprise ecosystem at all.

You'll be hard pressed to find a language that has breadth and depth that .net has. Couple that with the new push to Open source, from an enterprise standpoint, it's a very attractive platform.


Compared to Python, serial in C# is quite a bit more annoying to handle. Esp. at those speeds, easier to write it all in Python and call it a day.

Windows 10 IOT is basically Raspberry Pi and Allwinner A64 only at this point, which excludes most of the ARM SBCs out there.

The problem with both these platforms is they are horribly I/O limited, to the tune of 1 full USB port worth of bandwidth. Other SBCs commonly push 4x that or more!


I dont think you know what .NET is - it's an entire software platform comprising of several languages (C#,F#,VB) along with a compiler toolchain (Roslyn,RyuJIT), managed runtime (CLR), high quality standard libraries (.NET standard/BCL), and productive application frameworks (ASP.NET), that compile into programs that can now run on Windows, Mac, Linux, mobile phones and even Raspberry Pi's.

These programs can do anything, just like any other code in any other language, and the protocols (like HTTP or UDP) to talk between processes or programs have nothing to do with the code itself, which gets compiled down to the same machine level instructions anyway regardless of what language you use.


> Outside of it, if your project ever need to run in anything that isn't Windows, or communicate with anything that isn't Microsoft, then you can't use .Net.

So what communication protocol are you using that .NET can't talk to? In Enterprise it's almost always SOAP or REST and .NET has some of if not the best technologies for producing or consuming both.


> then you can't use .Net

That's just plain wrong. Not only might .NET be a good option for a backend system (which can, of course, communicate with any platform), but people have been using .NET on non-windows systems via Mono for many years


That is a bit strong. I’m running an ASP.NET Cote app on Linux (well, SmartOS Linux emulation) with a PostgreSQL database and it works just fine.


.NET core runs on Linux, OSx and Windows. I would say that is about as cross platform as it gets.


I would find it hard to believe any new Projects would still use webforms. The fake statfull web MS tried to create with WebForms is just too bloated. With MVC they have something great, something you’d have to use generic handlers for in the past to get any sort of performance.


I'm a consultant and work across a number of accounts. Not sure what "fake statfull web" (assuming you meant state-full) means to you, but in one huge healthcare org and two medium-sized fin. services co's 4 new WebForms projects have started in the last 6 months. Smallest project is worth $1.2mm.


WebForms was meant to loosely mimic WinForms and provide an easy transition for VB developers from desktop to Web, and it was mostly successful. The fake statefullness OP's referring to is FormState and the attempts to make WebForms more like WinForms.

With the emergence of AJAX though most competent WebForms developers dumped it because of then overheads and used the framework more like Classic ASP while integrating AJAX.


To be fair, FormState problems could get pretty bad. By default, large apps would be posting back several hundred KB on each click (sometimes even in the low MB range). With AJAX, it was better, but still not in the acceptable range for non-intranet apps. There were always mechanisms by which competent developers could work around these problems, but for the most part, those would mean that you're fighting with the framework and not working in a particularly idiomatic, WebForms-y way.

In retrospect, I'm not surprised MVC gained popularity so quickly.


WebForms was a beast and a horrible web technology for the web. I was just stating that, since MS intent on killing VB, it was intended to make transition from Enterprise VB Desktop apps to Enterprise Web Apps easier and in that regard it was successful.

The issues with FormState made it mostly unusable over the internet, it was relegated to intranet applications for the most part.


>state-full

You meant stateful, right? I mean if we're being pedantic it's good to actually be correct.

Something that has success is successful, and when you're having trouble sleeping you might say you're feeling wakeful. Why then would it be state-full?


I think it's different in Europe (where you appear to be located), but at least in the States Webforms are huge amongst the Fortune 500 and healthcare industries.


It's pretty awful in about any regard in my experience. What would be the reason to use it over MVC?


Isn't using WebForms faster for implementing intranet apps? Drag and drop stuff, done.


It can be for simple stuff. It can also be a huge pain in the ass and it took a while before it was truly JavaScript and AJAX friendly.


WebForms are still actively developed and supported by Microsoft. The latest version is very good and the WebForms paradigm is incredibly productive for general business-line apps. You can build entire apps within hours or days that would take months otherwise with separate frameworks.

If you have a massive complex webapp then you should use MVC, or look at a separate frontend JS talking to a backend API, but WebForms serves its niche very well.


WebForms is only good for the simplest of LOB apps. Yes it is still supported, but many organizations are discouraging its use in new applications due to difficulties in scaling and long-term maintenance. In my company, all new projects are required to use MVC.

WebForms' selling point is that it is easy to bootstrap, but its limitations quickly become a liability in an enterprise setting, where small apps rarely stay small. Once you decide you need to extend your app and/or integrate with newer non-MS web technologies, you are backed into a corner.

WebForms is something that really ought to have been deprecated, but people are still clinging onto it because it's so easy to use and there are too many legacy apps that still depend on it.

I suspect it's the kind of Stockholm Syndrome that have kept Mongo users faithful over the years. At the back of your head you know you're going to have to pay down the technical debt later, but you can't resist because it's so easy to get started and to see results.

(though to be fair, Mongo 3.4 onwards has overcome some of the serious flaws of earlier versions)


I work in the finance sector, and I don't see any new projects being built around JVM (or kafka, or cassandra, but elastic search is still popular). That said, the existing java product deployments are solid and there is no terrifying rush port them. New web tooling is a split between go and python. Also it doesn't hurt that gigantic amounts of business logic are PLSQL, with more going that way every day.

We haven't seen .NET for a new project in 5+ years. Doesn't mean it's not a viable tool, but the deployment story is a cost nightmare to us, and our teams distrust the upstream vendor.


Tons of stuff is still built on the JVM. The big five tech companies (besides MS) use Java nearly exclusively for back end development. Python is good for ML and data crunching, but compared to Java it's dog slow.

Go is definitely catching on but nowhere near passing Java, maybe it will someday


The big 5 tech companies are Apple, Microsoft, Google, Facebook, and Amazon.

Neither Apple nor Microsoft use Java.

Facebook uses PHP, Google uses a lot of languages but mostly C++ for Search. Amazon does seem to use a lot of Java.


> Neither Apple nor Microsoft use Java.

From what I understand Apple uses java/scala fairly extensively for backend services.


And they also run portions of iCloud on Azure using .NET.


They run portions on Azure. That doesn't mean they are using .Net. Azure supports more than .Net.


I've been hearing that .NET is dead/dying for probably 8 years now. I work on an enterprise software platform comprised of mostly .NET microservices and some NodeJs sprinkled here and there on the back end. 80% of our .NET code is running in a container on a Linux distro. The other 20% just hasn't been ported to .NET Core or has some shitty dependency which can only run on a Windows environment. I see some of our devs switching to Macs for development already. All of this has occurred in just 2 years. I would say give it some time. The progress has been amazing in my opinion.


> That's a shame, since in many ways it is a better designed framework, with a superior flagship language (C#) compared to the Java platform. Their framework and language designers are truly world-class, probably the best in the world.

While I'm happy about the progress and I hope that .NET Core succeeds, I've heard this claim repeatedly and I must say that it doesn't stand up to scrutiny.

The biggest problem of .NET's community and Microsoft's is that it fixated on Java the language, missing out on the improvements that happened in Java the runtime, not to mention the ecosystem.

Just to give a small example, the "tiered compilation" coming in .NET Core has been in Java since version 1.4, so we're talking about 2002. That was the Java version coming with the Hotspot VM, inspired by Self and Strongtalk. And it has only gotten better since then.

Java the language is terrible, we can all agree, however you can swap it with Scala, Kotlin, Clojure, Haskell (Eta), Groovy, JRuby and others, all of which benefit from running on the JVM, with the JVM itself turning out to be a much better host for other languages. Which is a little ironic given .NET's initial marketing.

Also another problem is that the community is waiting to be spoon-fed by Microsoft. In Java's ecosystem on the other hand the endorsement of Oracle is almost irrelevant. Outside the OpenJDK JVM itself most interesting projects are not built by Oracle. And even in the JVM area you've got interesting alternatives like Azul's Zing, featuring an awesome "pauseless GC".

Hopefully with the opening of .NET we'll see some actual competition to the JVM, but to those of us that have been in JVM's ecosystem for some time it's actually pretty clear why .NET lost thus far.


It's not like when you switch to Scala you get all the advantages of java without having to deal with a crappy language. You're also giving up a large amount of tooling.


A lot of the tooling is reusable. Profilers, debuggers, build tools, libraries all work.

And IntelliJ IDEA has been doing a good job with its support for multiple languages, having great support for Scala, Kotlin, Groovy and JRuby at least. There's also great support available for Clojure built by a third party.

Yes, I think you get most of the advantages of Java. There's a learning curve involved for Java developers of course, but it's very incremental because the underlying platform is the same and this matters.


> you can swap it with Scala, Kotlin, Clojure, Haskell (Eta), Groovy, JRuby and others

Only Scala and Kotlin are feasible alternatives to Java for building applications on the JVM or Android. The others in that list are limited by dynamic typing to scripting only or didn't see much adoption for building large systems, e.g. Apache Groovy for glue code and build scripts.


"High-end web tooling is almost exclusively JVM based (Kafka, Cassandra, Elastic Search, Kibana etc). "

This is what's making me want to move away from .NET. Most really interesting development is done in Java and Linux. With .NET and Windows you are often a step behind.


I have to agree. When evaluating what to learn next, all the interesting distributed systems I’d like to work in are all writen in Java, C++, and now a sprinkling of GoLang.

All the C# I run across is line of business stuff. So it may very well be great for that, but it’s less interesting from a development perspective.


I feel this is anecdotal, with the truth being that there are now more and more alternatives to the JVM for enterprise systems. Which could be one reason why the JVM has been loosing market share over the past few years. Not to say that Java, Scala or Clojure are not great languages. But I think its going to be trend that continues.


I agree with the stuff that's going around Go and others. But .NET is certainly not where the cool stuff is happening.


Don't forget the Unity3D, most of the people who use Unity uses C# to make a game. Recently, Godot Engine also added C# support. So .Net is not just about web development.


To be fair Unity is using a very old version of Mono.


They will be upgrading this year, I think.


I think .NET's vision is get people using Azure. You could say the same about VS Code. MS want to gain developer mind-share and get them using their cloud.


How does VS Code play into their cloud strategy?


They provide you with the convenience to push to Azure with a push of a button. These extensions are automatically recommended when you modify various file types.


You know, I've heard this claim before (that the strategy behind VS Code is to make deploying code to Azure easy), but it never made much sense to me. Deploying a service to production straight from an IDE/editor sounds like a recipe for disaster. I say this as a daily user of Visual Studio, VS Code, and Azure.


I don't think it's about production deployments.

Making it easy to setup a demo project means things may stay on Asure because that's the fastest path to production. Thus it's about business migrating from Demo (Asure) > Production (Asure) vs Production AWS > Azure.


Basically this, but they also push things like Application Insights, which is heavily tied to Azure.

The VS Code editor is also embedded in the Azure web portal. So by getting people using Code they may find it easier to up-sell to Azure. In fact, Code started life as the Monaco editor in Azure and was spun out into a separate product.


Oh my god someone mentioned App Insights organically! My day has been made.

Dev here, our strategy for AI is Azure-first, but not Azure only. While we provide first class monitoring for ASP.net services running on Azure, we also have lots of open source SDKs available for major languages, as well as first class Java and node.js SDKs and are trying to bring some of our other open source SDKs to the same level.

We totally get that ASP.net isn’t the end all be all and that people run other types of services, so we’re trying to bring App Insights to as many of these services as possible.


Java may be the JVM's "flagship language", but why would I replace the whole platform with C# when Scala and Clojure exist, and stay compatible with the JVM?


Kotlin as well as a less radical departure from Java.


Some people would take CLR over JVM, so YMMV


Ok but why? There are a few low-level performance-oriented programs that benefit from struct types (which the JVM now has too) or reified generics. For ordinary day-to-day programming, though, F# is underwhelming by comparison with Scala, and C# is better than Java but not by enough to be worth migrating platforms for. What's the USP of the CLR? When it first came out I thought it was more friendly to foreign languages, but that doesn't seem to have been borne out in practice e.g. Jython felt like it saw way more use than IronPython.


I think one reason jvm has so many more languages is because the need for java substitutes is higher. C# is a pretty good language. And it's hard for better languages to make up for the lack of tooling.


I'm not convinced; C# has some usability improvements over Java (particularly earlier versions) and VS is maybe a bit better than the Java options, but it's not a huge margin. And, I mean, IronPython existed and had an audience. But I suspect Python is a much bigger leap for Windows developers than it is for *nix developers. More than that, third-party languages were never really a big thing on .net - F# and Scala fill very similar niches, but one got the sense that F# was only ever developed by Microsoft Research, whereas Odersky worked on Generics Java and then Scala as a professor not directly affiliated with Sun/Oracle.


I think that today c# and java aren't that far apart. But Scala was created in 2004, c# got lambdas in 2007,and java got them in 2014. So there were a lot of years when the c# java gap was pretty large, which gave Scala lots of time to grow to a critical mass.

I think you're right another factor is that there are more Python and Ruby devs looking to write Python and Ruby on the JVM then the clr.


The most compelling reason I have for choosing CLR and C# over virtually anything else (and ESPECIALLY Clojure and Scala) is availability (and consequently cost) of skilled resources. Availability both today, and 5 or 10 years from today, depending on the project or program.

In my world (Fortune 500) boutique tech carries inherent risk.


This sounds as if skilled Java developers are harder to find that C# developers. Is this indeed so?


For me, Oracle is not as good of a stewart of Java as Microsoft is of .Net.

I wouldn't waste my time converting from a Java infrastructure to a .Net infrastructure and if I were a Linux shop, I probably would stick with Java for awhile, but if I'm already using Windows servers or have my choice today of using Windows only for the backend, I would definitely chose it because of the number of devs and network people available.


I know why you said Java. But I pretty expressly didn't, because BigCorp won't know or care why you said Java. Technical smugness doesn't change the fact that Scala and Clojure are exotic, and that exotic carries risk.


> F# is underwhelming by comparison with Scala

Please elaborate. This is the first I have heard from someone experienced in both F# and Scala to assert this.


I like F# but the lack of higher kinds means F# is mostly just C# with a teaser grammar. It doesn’t really allow for a fundamentally different library envronment.


Disagree as someone who has programmed in both Scala and F#; I found F# pretty much could do the same things just in different ways. In F# I found more ways to squeeze performance than in Scala which by comparison is bloated. For the data applications ive written F# wins usually especially with ad-hoc tactical apps and in my experience was easier to teach than Scala which is not as coherent of a language.


> could do the same just in different ways

Write a function that works with any monad? No?

Write a function that works with any numeric type? No?

You can fake type-classes, but it’s in no way a first class citizen. You can’t easily fake higher kinds.

You may not need those features, it doesn’t make my original statement any less true.


I agree with the first missing feature as you state; I just don't know how much value-add those features actually add in real world apps - often people use them in weird and unintitutive ways as well. F# has other features that other languages don't have as well. I find the workflow syntax eliminates some of the need for the first; and I find I can write functions that work with most numeric types at least a lot more so than C#/Java/etc. As a simple example the in-built F# library comes with functions that work on most number types (e.g SumBy works with anything that supports (+) including my own types). Sure there might be advanced examples that I wish I could do but they don't come often. I do find F# more concise, generally less "smart" and more explicit than Scala code which I think is a good thing. I've seen some funky Scala code in the past. Ease of code/learning/etc, and a maintainable codebase at least for me trumps features most of the time.


> If Microsoft doesn't pour a billion dollars into getting .Net ready for Linux in 2018, .Net is over.

I feel very confident stating the opposite. If Microsoft halts all investment in .Net today, .Net will still be around another 30 years at least with maintenance work alone.


Yeah, but its direct competitor is also fine in this regard. If all Oracle employees are nuked tomorrow, Java will still outlive Cobol.


They are busy porting millions of lines of code to work on Linux. Cut them a little slack on HTTP2. It's coming I'm sure.


.NET core is lacking so many features it's ridiculous, we've had to downgrade 2 projects recently because even MS Azure service APIs weren't supported - if you have to work with .NET avoid core and save your self the hassle - it's still alpha quality in many aspects after years since "1.0". I regret pursuing .NET career at this point, all recent developments on the platform are a joke - despite the praise they get for OSS moves. I'm moving towards frontend these days just to get away from this mess (ironic considering how messy frontend is - should tell you enough about state of .NET core/xamarin)


I've found the same, trying to do anything non trivial in dotnet core is just asking for headache after headache. Its basic things that end up costing hours in effort to get them working. Stuff you don't think twice about in .net. I really really want to use core but it just doesn't seem ready yet, sadly.


I first tried going full on .Net Core with an ASP.Net Core project with Docker and I was going to try to use Kubernetes even though we were going to stick with Windows Servers.

It was overly complicated and there were so many gotchas I found in the proof of concept that I did, I backtracked and went with the ASP.Net Core Framework (aka Asp.Net 5) using Kestral on top of .Net 4.6 and using Hashicorp's Nomad for orchestration.

I'll try again in a year....


What features are lacking exactly? With .NET Standard, almost everything should work unless it's relying on Windows specific APIs.


I was hoping your footnote was going to be a cite from a reputable source when you stated most startups and Enterprises are predominantly Linux, not just your own anecdotal experience.

My own experience is that most large enterprises use Windows because that's what their network people are use to and finding Windows network admins and developers are easier.


Regarding HTTP/2: I felt the development of this feature went a little bit "strange". For a long time the feature was blocked by missing support for ALPN negotiation on SSL. There was some interest from the outside to work on it, but discussion on it was stuck for a loooong time (1.5 years). As far as I can see now ALPN support has finally been added to .NET core: https://github.com/dotnet/corefx/pull/24389

HTTP/2 itself requires ALPN to talk to browsers, however a large part of the implementation can already been done without it. Out of personal interest I poured quite a ton of work in the beginning of this year into writing a solid HTTP/2 library for .NET, which could have been the base for webservers as well as things like GRPC: https://github.com/Matthias247/http2dotnet

It's state should be good enough to enable HTTP/2 now with less than a 2 weeks of work. However unfortunately I never got any feedback around it or felt interest in it, even though I think lots of stakeholders should be aware about it.

It seems like the ASP .Net core team is implementing now their own HTTP/2 library, which was far more barebones than mine when I last looked at it (https://github.com/aspnet/KestrelHttpServer/pull/1991). Don't have the time and interest to review the latest state.


gRPC C# currently comes with its own HTTP2 implementation, and is basically a wrapper over the C code that implements gRPC and HTTP2 stack. It doesn’t rely on .NET’s implementation of HTTP2 at all. And it does run on Linux as well as Windows.


> with a superior flagship language (C#)

and don't forget VB.net, which is an excellent language for non IT professional novice programmers, particularly if they come form VBA. .net provides a good language for novices that gives access to most of the flexibility and power of the framework (outside Xamarin basically).


I would not recommend VB.NET to anybody. The similarly to VBA is only very superficial and otherwise pretty much all attention is on C#.


Visual Basic is really not a good language. And it's essentially dead. Good luck finding examples, even sometimes on MSDN docs, using VB. Unless you also know C# and can translate between them, it's somewhat difficult to develop in VB.

I'm sort of surprised that Python on the CLR isn't more popular than it is; with the investments made in the DLR specifically for better dynamic language support, that seemed to be a natural move to me.


What's the appeal of CLR's python implementation when compared to the C python implementation?


You can interop with other .NET code. That's very attractive sometimes.


No GIL


http2? its too new to be supported.

.net http client does not support http cookies rfc 6265 which is 6 years old.


> What's holding .Net back is a lack of the vision thing.

What gives you the impression that it's being held back?

> High-end web tooling is almost exclusively JVM based...

Pffffft. You can't just pick a few JVM tools and proclaim that those are the only "high-end" options. Far from it. Have you heard of Mongo? Redis? Azure Event Hub? ScyllaDB?

> But even they are looking to move off Windows.

Oh how convenient that your anecdotal evidence supports your argument. Well, I also consult for small and medium sized business including many, many Medical companies. None of them want to move off of Windows. Quite the opposite - some of them have Unix systems that they can't get away from fast enough.


The only thing that is holding .NET back is the significantly slower compilation speed when compared to Eclipse's incremental java compiler.


If you spend 99% of your time coding and 1% of your time compiling, does it really matter that much?


the resharper plugin to visual Studio or the rider ide will both do this. Only builds the projects required and doesn’t need to build dependent projects unless a signature changed.


It's not comparable whatsoever to how much faster Java is. In Eclipse it basically compiles in the background right after saving a file so you never feel the impact of compilation.


you can do that in .net with the watch command https://docs.microsoft.com/en-us/aspnet/core/tutorials/dotne...


I'm not sure now, but 10 years ago I was really feeling the impact of compilation in eclipse. On a big project that I was working on it was taking about 20 minutes for a full build and I had to disable the background compilation because it always messed up stuff and my code would be out of synch. I think that in general Java compilation feels a bit faster, but for sure you can't say that you don't feel it at all in big projects.


How big is your codebase for this to be a factor?


I abandoned .NET over a lack of http2 support as well. The reason? It uses an HTTP implementation baked into the windows kernel. Wtf?

So not only does it lack HTTP2 support on Linux but also non-evergreen versions of windows.

And yes Go is the new competitor for Java, .NET core is a footnote because it has no open source community support.

I'll agree that C# is perhaps the best designed language I've ever used, but it seems that Microsoft decided to open it up many years too late to save it's market share.

Their best bet is creating native Java library interoperability. Third parties have been offering for years, but if it was baked in MS might just have a chance




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: