Linux is Most Used OS in Microsoft Azure – over 50 percent of VM cores
build5nines.com
build5nines.com
I can't think it'd be anything other than 'big enterprise' applications, where there seems to be a lot of bespoke stuff built specifically for Windows Server (e.g. finance software, healthcare systems, marriage registration, taxi licensing, nursing home management, etc).
Unfortunately this sort of stuff is fairly rare to be available in the open-source world, because there is such little demand for it by individuals.
The wackiest one I've come across is a CMS (Crematorium Management System). If anyone wants to create an open-source one with me, please get in touch...!
There are also whole industries where Windows has a particularly strong influence, e.g. (from experience) some parts of finance, petroleum, television, and I imagine things like render farms or other specialist graphics work that might have grown out of a once Windows-only desktop software cottage industry.
I guess it's also important to say, much as you might find a zealous love for UNIX inside many (computer) engineering-led organizations, similar loyalty to Windows exists in many more (locally under-represented) industries for reasons that are less likely to be understood around here.
On the side of deploying and managing workstations, I would take Windows every single time over MacOS or Linux. For real, some combination of Apple Business Manager and JAMF is supposed to go head-to-head against AD+GPO? On Linux--Centrify, or something from Red Hat, that might well be more costly than Windows licenses (guessing here)?
Much render farm/graphics work was once Mac territory but given Apple's ridiculous pricing and lack of server options besides stacked Mac Minis or support for NVidia stuff many have shifted away. Truly sad...
Currently, a WPF developer, since that was the technology chosen by the previous developer, and cannot stand working with Windows 10. People praise Visual Studios but under heavy development, crash often. It is not designed for coding/typing. Visual Studio Code is better at that and has only been around a short amount of time.
.NET / C# is useful but frameworks like Entity are layered bloat where standard SQL is so much faster and cleaner to utilize. Moving from Entity to standard SQL reduced start-up time by 10 seconds in one application. All the benefits the Entity has is only if the provider for your DB back-end has those ability coded with-in it.
I actually miss being an embedded and full-stack developer writing C, C++, go, typescript, JavaScript ... Even writing cross-platform QT5 applications in Linux and only using Mac or Windows to build and package the binaries is more pleasant.
A big part is that Linux / BSD is focused around development where Windows is a second had citizen. From the register which prevents simple backing up and restoring configuration settings fro application settings versus a config.ini file or such, which can be stored in git. Or the directory System32 = 64 bit DLLs versus SysWow64 = 32 bit DLLs. Inability to use very useful commands such as rsync and lsof or even piping through SSH. Or forced to keep useless applications around/running/installed such as XBOX or Cortana.
Example: `echo -e "#include <stdio.h>\nint main() { printf(\"Hello, world\"); return 0;}" > hello.c && gcc hello.c && ./a.out`
Even the desktop environment in Windows lacks usefulness and takes more steps then ones in Linux. Windows keeps on adding bloat to each new version. Why do I need to have the ability to run 16bit applications around if I'm never going to run 16bit applications?
These are some of the reasons I only deploy Linux VMs on Azure. Lean and only retains what you need with simple backup means and deployment.
At least with wsl2 I get the Linux goodness and decent docker support finally, hopefully it can roll out of insiders in into GA soon so everyone can get their hands on it.
Eh... outside of the broadcast motion graphics group, small personal/business farms, or educational institutions this is largely a majority Linux area.*
*I'm speaking from the perspective of public cloud farms and the feature film industry (for VFX and Anim). You can't escape Windows for select software and plugins, but if it's not a strict requirement by the software, then it's a business choice for other reasons (i.e. existing environment, staff, etc) because you will from a technical standpoint operate at a loss using Windows.
It's a bunch of actual people designing buildings that cost so much more than a Windows license doing Real Things that have some lingua franca interface that has no reason to go Linux and probably never will, because in that business they're too busy with actual priorities to ever even discuss how the status quo could change. There are 10,000 industries like this, and probably 10,000 people to each of those who simply don't care, because to them the computer is and will remain only a tool. That's the world of Windows we can't see.
Once you get beyond small teams doing the work, this starts to play in massively. Pretty much all medium+ sized studios have their artist pipeline on Linux, reserving Windows or macOS for tools like Adobe, ZBrush or Marvelous Designer that don't have a Linux build yet. And where I'm at, the operating system itself doesn't even matter to the artists. All they need to know is "this button opens terminal, this command puts me in the right show, this command launches the hub" and from there they're in our GUI pipeline. Their environment is the DCC, not the OS. For all intents and purposes it's completely abstracted away from them.
That's not to say there aren't those that take advantage, creating custom commands and utilities to share with others. But for the most part the fact that it's not Windows or macOS doesn't bother them.
Most of what I've written in the past 5+ years either targets or runs in linux/docker. It's been a challenge pulling the teams up to spead.
I still get the occasional question when something breaks. That said, it would be nice if more understood some of the underlying stuff... I've had to champion a lot of the changes myself.
I have IT experience in the "mom and pop" small-medium business world but am pretty Linux illiterate.
I can buy a copy of Windows Server 2019, install the ActiveDirectory role, create a domain, and domain-join every computer that business has, and start doing all kinds of simple-but-effective policies like folder redirection+shadow copies, define password policies, start checking various compliance boxes, formalize a file share permission structure, enable Bitlocker, etc etc etc. Also, apps for nearly any business exist on Windows.
Do Linux equivalents for any of this even exist? If they do, is there a large pool of competent admins you can hire for cheap in every non-megacity?
The shift currently is from physical servers being owned by SMB to _the same architecture_ in the cloud. As the cloud admin market saturates, you'll see the % of Linux machines in the cloud drop and drop as SMB migrates their familiar setup to the commoditized cloud market.
The bottom line is your average non-Silicon Valley user can't smoothly change between Outlook 2010 and Outlook 2013. If you think a switch to Linux is possible in any timeframe less than decades, you are out of touch with the common computer user and their business needs.
EDIT: i use SMB as an abbreviation for small-medium business https://en.wikipedia.org/wiki/Small_and_medium-sized_enterpr...
https://en.wikipedia.org/wiki/Distributed_Computing_Environm...
Interestingly, SMB is about to switch to Google's QUIC UDP, which is a great improvement.
Windows can also manage linux authentication, but likewise is missing parts for advanced usage.
while this is probably true, it entirely misses the point.
it's only true because a very, very small number of megacompanies consume huge amounts of servers; a more accurate number for this discussion would be server per company. Nearly every business larger than a few people has a need for a windows server (for basic filesharing and Domain authentication, not databases or custom apps) and a windows app for their business that can be filled nearly off-the-shelf.
the cost-benefit of trying to start a linux setup is not even close to worth it.
SMEs tend to buy cheap laptops, that come with "free" Windows Home. (I don't that that version can even be added to a domain) Then they start expanding and just stick with "what works", until it doesn't.
But I see this dropping drastically in the next decade, as PC replacements(read even cheaper Chromebooks and tablets) take more hold and web takes over even spreadsheets.
are you referring to azure AD? thats basically what i said originally - on-prem deployments are being replaced by cloud infrastructure. the point is that its a windows architecture, which is what the person i was replying to didnt understand/know.
But it should be cheaper when it comes to refresh time (for your on-prem AD), unless you have to pony up for Enterprise (for compliance and enhanced MFA, which is more like 40 dollars per month), or if you have software which relies on on-prem AD. And Intune manages Windows systems using a combination of MDM profiles and GPO (https://docs.microsoft.com/en-us/mem/intune/configuration/ad...).
I understood you:
The cheapest Enterprise Mobility + Security license is ~$105 per year.
A Windows user CAL is ~$10 per year. To be on-prem requires a physical server; if a $10k server lasts 6 years, thats ~$1700 a year to do more than AD but let's assume 100% of costs are for AD. Also, the Windows Server license (depending on purchase method) is ~$100 per year.
Up until 18 users, the server investment is more expensive. [18 * 10] + 100 + 1700 = 1980 versus [18 * 105] = 1890. At everything above 19 users, EMS is more expensive, 1990 vs 1995. Note that this comparison is very slanted in favor of EMS licenses. A $10k server is more expensive than most small business have and 100% of the cost isn't actually for hosting AD (domain controllers are generally lightweight and non-resource intensive). In reality, it becomes cheaper at something closer to 8 users, which covers most small businesses that are more than just a personal laptop and a point-of-sale terminal/CC machine.
If anyone is looking for something to open source: Meet manager. Since the 90s it has been the go-to software for running competative swimming meets (timing, heats organization etc). It's a niche market but is alway a very broad and steady user base. (Similar software is also used for track and field meets.)
http://activesupport.force.com/hytekswimming/articles/en_US/...
https://arstechnica.com/gadgets/2018/11/microsoft-wants-azur...
https://github.com/dotnet/orleans
Orleans can run on .NET Core now, but I don't believe .NET Core existed when those backends were first created. So they would've been running under the full .NET Framework on Windows.
I switched to Linux, and most importantly open source technology - in order to get out of the Windows ecosystem. I switched from an ASP stack to Node.JS, but it feels Microsoft is still stalking me, buying NPM, Github, releasing their own JavaScript flavor, releasing their own "open source" software bundled with proprietary add-ons, meanwhile suing Linux users for patent breach.
ASP.NET MVC C# with EF has got to be one of the most solid web frameworks I've ever used. Open-source fanatics refuse to listen about why it's great... even though it's open source now.
I think EF might get a bad rap because it's pretty closely tied to MS SQL Server - and if you don't know exactly what you're doing it will write some pretty hideous queries for you.
edit: by no abstraction, we have like 4 db methods that have a different generic type interface, but that's it across hundreds of different SP calls at the API later.
Once you add Windows to any implementation a few things happen. You pay more for licensing, you pay a lot more for resources (you can do a lot with 128MB/0.25 vCPU VM with Linux), and it is a much slower for VMs to scale in and out for elastic workloads like bringing instances up and down based on queue length.
On Linux l, I never had a problem with ssh unless I made a mistake in network configuration and doesn't suddenly block my access like that.
Windows also takes larger amount of resources compared to Linux and running a 1GB memory instance meant it could run out of memory anytime freezing the whole experience without doing much of anything on it. Not sure why 1GB instance even exists as it's quite useless.
I feel like I'm doing a job inside ssh session but feels I'm being dragged down with mouse click achieving very little per second. On Linux, automation can be done anyway you like but on Windows, that's just not the way it's meant to be with random GUI apps. No idea how to back up configs of those or invoke actions programmatically.
And you have to pay for the license.
Windows is a consumer OS by design.
But the barrier to entry seemed so high at the time - you needed MSDN subscriptions, paid IDEs, and paid servers. All out of my reach as a self taught junior developer.
I don't know how or where everyone learnt it all, except as graduate developers at BigCorp?
Moving to Linux was a new world opening, that I had only seen glimpses of before. Using apt-get to install an app was mind blowing. Getting used to the command line took a while, but now I do everything from the terminal, except some GUI apps and the browser. Still have to look up most commands and read man pages though.
Much the same way as Windows users probably are not big objective C developers...
It just felt like for a server language like .NET that your personal laptop shouldn't really matter much.
And even if you're buys a laptop, then you must pay extra for the "pro" version of Windows to actually install IIS. (Last time I tried installing IIS on Win7Home - it just told me that my OS wasn't supported)
Anyone running a copy of Windows could run a free copy of SQL Server (Express) and SQL Server Studio, IIS Express and the .NET Framework using VS Community to build MVC apps. You would use the Web Platform Installer for just about any of those things.
Between https://dotnet.microsoft.com/apps/aspnet (previously https://asp.net) and https://www.microsoft.com/web/downloads/platform.aspx it's generally very easy to dip your feet in the waters.
(All that being said, I'm now in the NodeJS ecosystem. It's... interesting!)
- Visual Studio Community Edition is full featured and free
- SQL Server Express is free
- You really don't need IIS but it is free. With C# you can run on top of Kestral.
There were free editions but they were crippled versions of the paid ones with no extensions, etc. The free versions were generally unloved and had annoying quirks.
At the time you needed to add a Resharper license in there too to be decently productive which was yet another overhead.
However, VS Express itself took a while to appear. Back when .NET first appeared, the only thing that was free was the .NET Framework itself (including command line compilers), and online MSDN documentation. Eventually, we got SharpDevelop.
But, well, there's free, and then there's free. In my home country, you could buy a bundle of CDs with complete VS 2002 + MSDN distribution on the black market for around $20. Which was still expensive for students, mind you - so the same bundle was then shared around the class (including the teachers, who only had an older bundle of VS6).
It wasn’t until 2014 when MS started releasing the non crippled version.
But consider yourself lucky. Do you know how hard it was for middle schooler to get a good 65C02 assembler in the 80s like I had to?
It looks like they design for developers with gaming rigs and ten finger chords, I even start enjoying using Eclipse again after spending a couple of months on a Java assignment with InteliJ.
Then my .NET team wonders why I never complain about VS speed and crashes, easy, I am the only one not using Resharper.
Even reading the docs seemed to need a login and paid subscription.
I think VS Community started in 2015... there was also a SharpDevelop and MonoDevelop option in between, from pretty early on. I used SharpDevelop on my own projects for a number of years. Around 2011 I started using Node more and have been back and forth on projects since.
Microsoft certainly don't sue as much as they used, but that's because they are no longer developing as much groundbreaking tech. And when they do develop something, everyone avoids touching it with ten-foot pole (see also: "success" of UEFI on ARM devices).
https://cloudblogs.microsoft.com/opensource/2019/08/28/exfat...
I won't argue how groundbreaking their technology is of late, but in all fairness they have been much more open with their code.
Aside from breaking stuff all the time, Ubuntu seems to have wide swings in the quality of documentation.
Btw - "more powerful" is literally the ultimate subjective statement.
This is especially applicable if you learn a bunch of generic “everything is a text file” hacker skills, maybe with a little code on top.
Could you manage the crematorium using YAML files edited in GitHub? Maybe. Any collaborative tool with tagging can usually be beaten hard enough with a hammer to turn it into something useful in a specific domain.
We make pens and paper and do all sorts of specific business with these generic tools. Encouraging the generic use of computers might seem like dragging us back to the 1980s, but it’s how these tools were meant to be used!
This is similar to the fact that basic knowledge of file systems and file formats is lacking in many modern teenagers, because this is all abstracted away by smartphone apps and cloud storage.
As a tech guy, I'd love to run the crematorium using YAML files in GitHub, but the reality is that the target audience for the system is Funeral Directors and Cremation Assistants, so it needs to be a non-technical user interface.
Most mind-blowing use case of a Windows server I've encountered was a server running nothing but nginx.
On the bad side, I just couldn't be bothered to create a script that would do that automatically, which resulted in one or two downtimes when I accidentally just tested the changes instead of reloading nginx for them to take affect ("nginx -s reload"). Repeated boring work lead to more carelessness, which would absolutely not happen if it was on any Linux system. I'd create an Ansible script(s) instead and wouldn't have to log into the servers manually for that one frequent use case.
Anyway, we have Windows servers running in Azure because we do a lot of GPGPU work, and the NVIDIA/CUDA drivers work best in Windows.
- Microsoft often bundles discounts for their their desktop and server licenses (used for AD and such) with Azure credits. Managers are under pressure to use the free service to deliver value, so teams are told to spin up things in azure as they see fit. reject the credits and reject the discount for the stuff you do use.
- Office 365, Outlook, Xbox Live, Xbox Music and Video, the Microsoft website, MSN, Search, and Visual Studio Online all run in Azure either in whole or in part. If you think Microsoft doesnt dog-food their cloud to pump its numbers, you probably werent around when they bought out shared hosting providers "park website" clusters and converted them to IIS instances to inflate their Netcraft numbers against Apache.
The medium-sized enterprises (100MM$ to 500MM$ annual revenue) are the ones who aren't looking at Linux. These are the ones with in-house tech support, who only know Windows. Maybe they are the average customers that won't switch over?
Note that I'm only talking about cloud-hosted SQL Server installations. When you're buying the whole infrastructure stack, it's a different story. Also, this isn't the area I specialize in, so this is just a narrow observation, not a broad pattern.
https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-...
You can find most of the material we reviewed in the official MS documentation:
https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-...
For example, here's the note about deprecating database mirroring:
https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-...
> Database mirroring, which was deprecated in SQL Server 2012, is not available on the Linux version of SQL Server nor will it be added. Customers still using database mirroring should start planning to migrate to availability groups, which is the replacement for database mirroring.
Database mirroring has been deprecated for several years. The replacement is Always On Availability Groups, which is vaguely supported on Linux.
It’s not just for enterprises!
For anything less, I reach for Node first, only because I can get something done faster.
https://www.microsoft.com/en-us/sql-server/sql-server-downlo...
No need for emulation.
Big chains probably have these things integrated in their ERP and CRM or use a custom software solution. But for smaller chains in their respective industries I don't see how you move these programs in the cloud right now without a complete rewrite.
To me that just seems weird... even though it's their product.
However, my experience in those kind of niches, is that the client will likely be very non-technical, and will prefer to use what everyone else is using, even if it's vastly overpriced and locks their processes in place.
Many internal apps likely don't need to target windows, but may have windows-isms baked in for a number of historical reasons. There are also a lot of .Net apps tethered to windows more out of heritage, most are easy enough to port, others much harder, it varies and there's a lot of apps unlikely to receive the effort to even explore the feasibility of migration to either mono or dotnet-core.
I'll bet that there's a huge number of virtual desktop machines. Instead of having to push a really fat windows disk image with all the apps installed, to all workstations, those workstations run remote desktop, and connect to a windows VM running in Azure.
> Crematorium Management System
Genuine question: why can't you use Microsoft Access or G Suite for this? Seems like the canonical data entry use case these products are designed for.
For example, the managed Postgres service runs on Windows which I didn't expect.
Willing to bet it's SQL Server and Azure AD
It was October so he was doing a checkup before firing them up. I went in for some PR chit-chat. Unfortunately he took it as a genuine occasion for conversation (genuinely lovely guy, genuinely liked him, genuinely liked the conversations, but... well...)
“Yeah yeah, you guys are great, calling me in to do preventative maintenance before firing ‘em up.” “Yeah, it’s protocol, I guess.” “Yeah yeah, but not everybody follow protocol y’know...” “Really?” “Yeah yeah, no... just came over from the crematorium.. they had a fat client inside and the burner conked out and we had to pull ‘em out half-done and let the chamber cool off so I could service the damned thing.” “...” “Yeah yeah, real bitch of a mornin’. Family there and everything. Waiting for the ashes, y’know?” “That must’ve been awkward.”“Yeah yeah, no no, they understood... you only do these things once, y’know... yeah yeah... bitch of a mornin’.”“Well I guess I’ll leave you to it then.” “Yeah yeah see you around."
Not to crap on MS, but I do think Linux has traditionally just been a better operating system for servers, probably due to the fact that that's where most of the funding for Linux ends up going, with the desktop versions of Linux being sort of secondary.
It doesn't help that a lot of serverey software is kind of designed with POSIX-ey stuff in mind. Node.js took awhile to get Windows support and ZeroMQ's Windows support doesn't support IPC sockets. Hell, in the little bit of testing that I've done with this, .NET Core is faster on Linux than Windows.
This isn't to say Windows is "bad". I'm personally not a fan but plenty of smart people I know like Windows better than Linux. It's just to say that, for the domain that Azure fills, Linux is often a better fit, and if MS wants to compete with AWS, it would be borderline-idiotic not to support Linux.
Networking on Microsoft was an afterthought until the mid-90's. Sure there were token ring and banyan vines drivers in the late 80's early 90's, but that was to share a drive letter. The entire idea of multiple users didn't appear until Win3.1 for workgroups, decades after multiuser OSes. WinNT started to take protected mode seriously, but they re-invented networking from an MS perspective (e.g., POP/SNMP? nope: MSExchange).
It's not a surprise that Windows is such a mess under the hood compared to Linux/BSD/Unix/SystemV when you look at the history of Windows. I dunno, maybe that's not fair, but switching between *nux and Windows from a networking / distributed computing perspective is jarring. And that's just for simple things (interface config, tracing, configuration of multiple adapters and bridges...)
What would be interesting is a complete re-imagining of a server OS. Consistent file locations for everything, which are automatically versioned a la git allowing you to roll back any specific change, built into the OS level. All processes totally sandboxed from each other with specific permission elevations as required (like iOS).
> What would be interesting is a complete re-imagining of a server OS
Not sure how 'complete', but aren't you after something like NixOS?
The Windows registry is a bad implementation of a good concept.
Imagine if the registry had a schema with embedded documentation, foreign key relationships, a packages database with each key owned by a package, etc...
I've built software with a configuration database (Windows registry) and with flat configuration file-folders (*nix). I feel like I'm running in a circle because the trade-offs are so equally balanced that there's no best-case. From considering backups and database consistency, to tripwire malware detection of changed settings, to automation of access, to consistency in naming, retrieval, and type conventions, to self-documentation, to backwards compatibility... At this point I'm not even sure I would understand the correct or "best" methodology if it was handed to me on a silver platter.
So a database then?
If by database you mean "relational database" – I'm not sure the relational model is the best fit for a config store. I think a more hierarchical database model is more natural for that purpose. (Of course, you could use a relational database as an underlying implementation detail – LDAP is fundamentally a hierarchical database, but there exist LDAP servers which store the data in an RDBMS, for example Oracle Internet Directory.)
There is a big difference between Linux and BSD here.
Linux has really exploded with configuration. Are we using 'ip' or 'ifconfig'? Are we using /etc/<app> or /etc/<app>.d/? What about /lib/system? Do I restart that systemctrl or service?
BSD has kept it a little more "pure" in that it is more of a "only one way to do it" philosophy.
There's a good reason why Linux absolutely dominates the server space.
It was like someone flipped a switch and suddenly there was only one type of environment for all computing (we used something else besides VNC to manage remote X sessions, I forget what it was, it was some weird launcher for Windows).
IT claimed hundreds of millions in savings due to not having to pay for AIX, HPUX and SunOS licensing. I think the cost is what tipped the scales.
Yeah, it was cheaper (in both senses of the word) than all the other contenders and more or less Unixy enough that software could easily be ported over.
Correct me if I'm wrong, but wasn't Linux quicker to support multithreading than Windows, largely because big megacorps needed that for their servers?
Some of the kernels were even good, but what gain does it bring if tar would always do the most insane action instead of backing-up your disk?
You can do what you describe without changing the kernel, but you would need to modify the userspace environment. One of my toy projects has been trying to run all "user" applications in filesystem sandboxes because I'm sick of how many random "dot-files/directories" get created in my home folder.
It's as opinionated as you are.
(FWIW there has always been a level of consistency in Linux w.r.t. file paths, if you stick to your distribution maintainers packages)
Usually, developers are sane and put things in /etc. However, there are a number of very common applications which have configurations strewn all over the place. Bonus points for apps which have even additional configurations in their systemd service files!
Windows 9x came from the single-user domain but is long dead except for compatibility stuff left over in modern Windows. Windows NT and its successors came from server space from its VMS lineage.
NT was supposed to be very tunable and modular and have multiple personalities and abstractions but it turns out it mostly is just win32-on-NT and everything else ended up being on top of win32.
It has gotten better, especially post-OneCore, but it still is very much restricted compared to Linux, BSD and Unix.
Windows NT (and VMS) were not as much multi-user server as they were more closer to mainframes (which died/are dying for their own reasons). VMS, like plan9, had concepts to allow many (theoretically) fancy server things, but were to much a created world instead of a grown world (like post-system-v). Also, while the VMS dude who was on the NT team did influence it heavily, the legacy they had to support made it almost impossible to use any of that fancy 'new' stuff back then. While it was orders of magnitude better than DOS, it feels like Windows needs to make yet another evolution like it did going from DOS to NT to get back to current times instead of patching on top of patches every time.
Even a simpler example though; the fact that there wasn't really a built-in analog for the "pipe" until PowerShell sort of boggles the mind. Yes, I'm aware that Windows isn't command-line focused, but it baffles me that software engineers didn't really see a need in Windows to compose programs together. (Someone, please correct me if I'm wrong on this point, I haven't touched Windows in any serious capacity in almost a decade).
From the get-go Windows NT (Win32) had a common model for overlapped IO (async IO in today's parlance). This async capability permeated everything from disk IO to network IO, and works well today with USB, Thunderbolt etc. Mind you, this model has not changed while Unix/Linux/POSIX still have not found a common model that works for all. See for instance https://stackoverflow.com/questions/13407542/is-there-really...
Under the hood Windows was also designed with a completion-oriented model (IO completion ports) which scales better in most instances than the Linux readiness-oriented approach (I believe that MacOS uses a completion approach as well, so the readiness approach is not universal *nix). Basically, windows saves at least one context switch for every basic IO operation. Windows supports the Berkeley sockets API with some optional extensions to make socket operations overlapped/async as well, essentially supporting both the straight socket model as well as the completion oriented extensions.
https://ss64.com/nt/syntax-redirection.html
And half the time you’d have to use the “for” cli monstrosity. I looked up the instructions every single time I used it for decades, that’s how bad it was/is.
https://en.wikipedia.org/wiki/Component_Object_Model
This is definitely getting deep into the Windows world, and if you didn't do a lot of highly Windows focused software development its probably easy to miss it. COM is a big giant complicated beast and definitely not a complete darling to work with but it had (has?) a lot of really cool concepts. Very different from the everything is a stream of text basis in Linux. And even now with things like Powershell, you're not sending text to the things you're piping to, you're passing .NET objects around.
Can you elaborate? Do you mean performance? Because the on the C level both use (apart from some minor differences, which aren't enough to call one 'simply better' than the other) the same berkeley socket API.
I might have been too harsh on Windows there, I've never paid to do any direct socket-level programming within Windows.
The biggest annoyance with Windows sockets is that they aren't really unified with files - as in, a socket file descriptor cannot be passed to file APIs that work on FDs, like read() and write(); you have to use send/recv(). This makes it harder to write generic code in C, since you need an abstraction layer for code that deals with I/O streams. But most frameworks already offer such an abstraction layer - e.g. a .NET API would just use Stream (and if it's a socket, it would be a NetworkStream instance).
I have PowerShell, Git Shell and Cygwin running on my windows Dev box and all three make me cry on a weekly basis because I have to switch between them to do different things. I suppose one day I will sit down to fix my Windows dev environment, but it makes me feel so bloody frustrated that my muscle-memory shell is so ... perverted by windows implementations.
MS is bringing Bash to windows natively. I don't know how that is going to work since piping just isn't there, but I've got my fingers crossed that I'll only have to deal with ONE shell for windows!!!
It's not a native Bash experience but it's pretty close. I say "not native" because it's actually running a VM under the hood and bridging the file systems via 9P network protocol.
I know people who are using it and love it. I have not switched yet, but I am definitely going to investigate it at some point.
However, Linux admins who know networking usually have a deeper understanding.
Windows NT, which is what everyone uses, is a descendant of VMS design and culture, built for shared file systems, multi-user accounts, and distributed computing just like UNIX.
But still for a long time Windows NT made a lot of concessions to the single-GUI-user model that UNIXes didn't, like putting font rendering in the kernel.
But for servers, I much prefer Linux. It uses less resources, and it's so much easier to get it into a known and consistent state that Windows.
Also, something about having a GUI for servers has always felt... wrong somehow!
It wouldn't surprise me at all to find some windows based companies that have classic windows VMs in the cloud, running Visual Studio, and production deployments are: RDP in, stopping with the little red button, updating the codebase (with a copy over a network share), and then re-running the code on the production server with the little green play button. Database changes are done by hand in SQL Server Manager.
I know this isn't at all related to the post here - but it's just an interesting phenomenon - the fact that Azure is about 50 percent windows means it's mostly running things like Office backend products, crazy running copies of Visual Studio. It is probably a total mess if half of Azure goes down for 5 minutes. Linux servers would come back up and continue running whatever. All the Windows companies get a call, have to RDP in and do shit.
This and the rest of your post is about one specific kind of developer, and I honestly wonder how you can think that's it.. Lack of experience or just bad luck and only ever met this kind perhaps? Anyway while I know for a fact these exist, your feeling is sort of wrong in that there are also developers who just use VS as the IDE it is (to write code and debug; it's good at that) and for the rest automate build environment setup, deployment and whatnot just like you'd do on another OS. I just don't know the numbers, i.e. which share of developers using VS act like you describe. It's not like using VS somehow makes people blind for concepts like CI. Data point: we have a bunch of scripts (combination of PowerShell/Python/MSbuild) which will install and setup the complete build environment from scratch (VS/Miniconda3/Vcpkg/...) checkout all code (yes from git, not from a network share), build a myriad of different flavors of the product, package it; all in one commandline command.
Python used to do this, it still may.
I think what you're noticing is that Visual Studio makes it easier for point-and-click developers to participate while a bash shell takes a little more effort to learn. You can have poor developers in both worlds or great developers in both worlds.
I have also build in Go, nodejs, Php, RoR.
But VS is truelly the best IDE experience I have witnessed.
Database changes are automatically migrated and deployed using entity framework fyi.
The big deployment button changes the connection string per deployment, deploys with feature flags directly and automatically migrates the db to the latest version
Something VS based development, build and deployment based workflows have been doing for over a decade through the largely Web..config files and .csproj files.
https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy...
That might have been true once, but I think Microsoft-stack devs are a lot more command line savvy these days.
The move towards DevOps and scripting makes the command line much more necessary, and makes the benefits of the command line clear. The move towards cloud has introduced Linux to a lot more organisations, yes, even Microsoft shops.
I don't think it's ever been that true. It's just a handy stick for some people to bash their perceived out-group.
I'm detecting a bit of disdain for the VS world
As someone who learnt to program using linux/Mac OS, when I got a job somewhere that used windows and VS exclusively, trying to get my head around the (to me) needlessly confusing and convoluted way in which windows-dotnet devs seemed to do things was a painful experience.
Watching some of them try and debug docker files was amusing because that was a total role reversal.
My experience as well. In fact it was extremely much faster.
- Hello world took something like 5 seconds to run on Windows
- on Linux (a VM on the exact same laptop, with the same Windows running underneath in fact) it was so fast I had to use the time command to figure out how many milliseconds it took :-)
FTR: while it was hardly scientific I actually put some effort into trying to make sure it was equal.
Well, technically it might have used 700ms the first time and 400ms later, I didn't measure the first run, but it was still way faster than on Windows which was why I started measuring using time after all.
Also on Windows it kept being slow on subsequent runs, and in my world that matters too.
I don't have recordings, but I recommend you try for yourself. I compiled both from the same source, and as far as I can remember I used standalone compilation for both (I don't have perfect memory but I have a history of being careful.)
RegEdit, is there a text version for that? Imo there's no comparison to the Linux ecosystem.
Windows is GUI first.
Apparently Windows is human first which isn't what servers are meant to be.
The GUI is big, and I run that when needed, RDS, userland stuff etc.
The advantage of Linux is when you want to accomplish tasks without a great internet connection, but the windows tools are not evolved enough as far as command line functionality.
You'd think that C++ would be relatively portable (though not as portable as Java), but you'd be mistaken. So many things are not portable.
But wchar_t is still 16-bit, yes - it's baked into the ABI for good now. It's not even a "default", since you can't change it.
As soon as I started reading the book, I knew it was way beyond my depth. I was taken by all the news praising Linux and the developers who were changing the world for the better. I too wanted to be part of that story and contribute to FOSS. I was so naive and got deceived by own magical thinking. I got laid off from my first job around that time. I looked for Linux jobs but soon realized that when normal companies put ads for dev jobs on Linux platform, they were mostly for web based java applications running on Jboss or Websphere. I was so dumb that I did not know this simple fact when I bought that book. I lacked mentors and with my social anxiety did not have friends who could advice me. Anyway. After a year at the second job, I got laid off again. One day I came back home and my wife complained about all the fat books I strew around for the umpteenth time. That was the last straw that broke my resolve. In a fit of rage and depression I threw all my books in the dumpster. I should have focused more on Java but I was too dump to realize that C and C++ native applications were on the wane (I used to be a windows developer) and Java based web applications were on the rise. Now I work as a production app support engineer where my coding skills don't count for much. If there is an issue, I have to call different teams like network, dev team and get the issue fixed. I weep sometimes at how my career has turned out. I realized I can't code anymore. When I sit to write code I am overcome by anxiety and can't complete the task for weeks. I am middle aged now in my mid forties.
Don't let my experience dampen your spirit. Go on and change the world.
I am driven to go through this book (in fact, I made the purchase just last night) out of an urge to comprehend the full stack of computing. I can't say I have mastered any layer of the stack but familiarizing myself with the domain and limits of each gives me the confidence to trust my intuitions.
I was a mere designer before, turned front-end/back-end web developer, but my curiosity now drives me towards infrastructure. I don't even know if coding is what I will end up doing with my professional life but I can't imagine any of this knowledge will ever go to waste. Knowing the ins-and-outs of the infrastructure that runs the world can't possibly be useless knowledge.
However, one thing that troubles me about computing is how quickly I become fatigued sitting and staring into a screen. Although for now, I can do it for an unhealthy amount of time, I know deep down that my body or my eyes will not last if I keep this up. And for that, I don't know if my coding skills will count for very much in the future either. I don't quite know what it is you do as an app support engineer but it doesn't sound so terrible to me! I get a satisfaction out of simply knowing what needs to be done and directing the rightful minds even if I may not be the one doing it.
I don't know if you had ever had a "passion" for coding but I certainly hope you can find some delight in it (again). The wall of text is an abyss when the inertia of joyful productivity is not on your side. And when the implementation roadmap is long, the burden can be too heavy. I dare to suggest something like visual code-art (like Processing.js, or Flutter art) to change your mind about coding. I find that getting immediate feedback from small changes you make to your code minimizes that burden and can make coding fun again.
I appreciate your encouraging words. Thank you and best of luck to you.
I probably only read 15% of it to supplement my on-the-job Linux experience.
P.S: I know there are legitimate reasons for running something on Windows but for any generic project that shouldn’t be the default at all. Linux is the de facto cloud OS.
I don't believe Microsoft is attached to making Windows the default though. Who knows why it is, maybe because people that use the Wizard are likely playing around and will rather want a Windows system? My guess is they'll switch the default if the percentages shift even more and they see that most that manually set something up will change the default. In the end, they want to sell computing and anything that gets in the way, well, gets in the way.
It's not crazy for them to suggest their own home-made soda first, it's marketing. Because that specialty soda makes them more money and differentiates them from their competitors who are just selling off-the-shelf stuff.
It's not crazy to not want to be a commodity.
If you're trying to serve a mass market? I think it is. Wasting time (yours + the customer's) by making them go through and deny the less common options isn't a good idea if you're aiming for serving as many people as possible as efficiently as possible. This would be very different if it wasn't Azure but some local tech company that sits down with you to talk about what kind of server you need and want, what OS best fits your requirements etc, but that's a very different game from what Microsoft is playing with Azure.
With low/self-service, streamlining the process is the right thing to do. In the end, you have to ask yourself, whether you want to earn a few bucks by also selling a licence to your OS, or whether you want more customers. Of course, it's not an actual issue in this case, because you'll usually not manually provision (but then again: why do it if you don't expect to make money by doing it?)
https://puppet.com/use-cases/windows-infrastructure-automati...
https://www.ansible.com/integrations/infrastructure/windows
There's also Desired State Configuration
https://docs.microsoft.com/en-us/powershell/scripting/dsc/ov...
There's also Group Policy.
https://en.wikipedia.org/wiki/Group_Policy
There's probably a thousand different ways to automatically deploy and manage Windows servers. Its been a thing since at least NT.
I mean, Windows versus Linux server CPU requirements... I don't know if FAANG-like companies are together large enough to skew the median or if the median web server is a single core Nginx system or something in between, but Windows on a single CPU just sounds horrible.
It would be interesting to see the contrast when counting by base OS (so LXC etc. within a system doesn't count).
I know there is some demand for Windows VMs in the enterprise, but even that seems to be shrinking.
I am way more productive on Linux, but I can see that this also put you in a position to easily be replaced.
As someone who discovered Unix in the early 00s, this makes me chuckle. What a world!
[edit] not to mention chromebooks and i would assume most of their consumer products (chromecasts, etc.)
You do have to install a Linux distro. So the kernel's not shipping, just an environment in which a kernel can be installed.
Now Linux has won over 50% of server market share in MicroSoft Azure, where I believe Hyper-V running on Windows is the hypervisor (Hyper-V is closely related to Xen).
- Linux has won (in the cloud).
- No one has ever thought one can use Linux desktop on windows via WSL one day.
- The best tool (distro, etc.)is the one that does what you need at the best cost ;-)
As a long term Linux desktop user (since Fedora Core 1 Yarrow), MicroSoft used to be the public enemy of open source, used to disgust me, now (after vs code, WSL, GitHub, showed genuine love to Linux and the community, etc.) I turn neutral (AFAIR - unless that was a daydream, Linus said similar thing).
It's not cheap to run and maintain XenDesktop based VDI infra for remote access. But I agree, ICA (improved RDP) and its client Receiver (works on Linux at least used to ;-) offers unique and seamless user experience working remotely.
I suspect that comes down to whether you need a VM or a VM in a massive ecosystem of other stuff you can connect to it
We ended up deploying to AWS instead.
A client of mine, a large multinational's overall corporate IT is very much Microsoft oriented, but I was working together with an R&D division, setting up a Linux/k8s-based proof of concept project. Somehow, the Azure team got wind of this and asked if we could meet. I expected absolutely nothing, but they ended up sending very competent technical sales guy, together with 2 engineers, that could answer every single question I threw at them, and they offered to help designing and setting up the infrastructure part, without us ever asking, no strings or invoices attached.
I think this sped up the poc by about a month or 2, just because they backed my opinion pretty much all the time, and had very valuable feedback and proposals to tackle certain other things. It also removed a lot of political crap, which is always there in a multinational. Being able to show the department head that Microsoft agreed with my solutions carried quite a bit of weight, and it didn't hurt my position at all.
Now, one of the managers tried to get the same support from both AWS and Google. AWS could send us some engineers (which would just be some freelance AWS certified engineers), but they fully determined the schedule (first slot we could get was 3 months after us asking), and there was a quite hefty invoice attached. Google didn't even respond. Now I know that cloud providers don't work that way, but many businesses don't like that. They want to be able to call someone when shit hits the fan. MS just uses their "boots on the ground" to also push azure within such businesses, and I'm not surprised it's working.
But would I host stuff there myself? Doubt it. I think the top 3 cloud providers are just too expensive.
Google didn't even respond.
That's very telling.
Because getting Microsoft 365 is easy and it gives you not only Windows and Office licenses but also AzureAD and Intune for single sign on and Windows management, a Slack competitor, a Trello competitor, a G Suite competitor, and a few other goodies in a comprehensive package.
So your development team tells you that they want to spin up a few Linux machines on the cloud and they mention Amazon and Google. Why bother with Amazon and Google? I mean, you're already knee deep in Azure and your company just hired an Azure guy and you're familiar with Azure support and billing and your IT guys are getting certified with Azure. At that point a better question is why not host it on Azure?