TBH, I'm on board with some of the negatives you listed, but I feel like the entire enthusiast community has been screaming about edge, telemetry, and start menu search for years. Microsoft seems determined not to listen, it's astonishing.
New users can be steered through every dark-pattern install process, and upsold into every service since they don't have existing preferences.
They can't directly revert power users to that state, but by keeping the UI in a state of constant flux, they might get some accidental traction from them.
Why? There is PowerShell, able to run on Linux and MacOS. And compared to Bash it is actually readable language.
You can keep it. I'll stick with zsh or bash.
It is always an object. Strings, arrays, paths, the registry—everything can be manipulated as an object.
Ah yes. Bash, and its highly intuitive `if /usr/bin/\[ 5 -eq "5" ']'; then :; fi` comparison operators.
I get that when everything is text, it becomes simpler to reason about. But you also have to do a lot of maneuvering to get information out of it. PS tries to give you more power.
My main gripe with ps is command discoverability: I don't know who thought that the "verb-subject" would be a good idea, because if I type "get-" and tab to auto complete, how the hell will I find the command about networking I want?
The learning curve also sucks, but I don't think it's worse than bash. I do remember spending six months with a bash manual tab open in my desktop back when I was starting Linux development.
There are also other crazy advantages ps have over bash, like the native ability to understand cmdlets and their parameters, powerful scripting capabilities with decent support for loops, conditionals etc.
And I don't event know what to tell you about the operators... They were copied from POSIX, so complaing about then is complaing about bash & co.
Finally, PowerShell also let's you access all of the dotnet namespace. This allows you to do a lot of stuff, because you would literally be programing instead of scripting.
The answer is the origins of how Windows handles everything. It diverged every time a new hire took over a subsystem. "Not invented by me" ran strong in those days.
try this PS script out
clear
function Get-Strings1 {
@('hello')
}
function Get-Strings2 {
@('hello', 'world!')
}
(Get-Strings1).Length
(Get-Strings2).Length
OUTPUT: 5
2
You see, PS will strip away the array for 1-element arrays. (Get-Strings1).Length is 5 because you're really calling Length on the string and not the array (the array doesn't exist at that point). As you can see with (Get-Strings2).Length, if there is more than 1 element it will not do this.and you'll watch different features crash into each other in bizarre ways. For example, everything is an object but if that's the case how do you output log statements to the console since it's also a shell?
PS is hosted, the default PS host will print out whatever reaches the "top". Think of your PS code as the "first function" with it's own set of returns. The host will print out whatever your code "returns", but this is consistent all the way down the chain.
clear
function Get-Strings3 {
(Do-Stuff)
return 'hello'
}
function Do-Stuff {
Write-Output 'haha'
}
(Get-Strings3).Length
OUTPUT: 2
So your returns can be polluted by downstream function calls, including calls into packages that you don't easily have access to the source for. So you'll eventually start writing defensively.(Do-Stuff) | Out-Null # throws away anything coming out of the function call
And consider what we've demonstrated here. That PS will happily remove arrays based upon runtime state and happily add them based upon runtime state.
If you're confused about why this still happens even though this version uses the return keyword, remember it's PS which means any silly, preconceived notions you have are out the window.
returns does two things.
1. Write-Output
2. Ends execution of the function
If you remove the return keyword it will have the exact behavior it did previously because it's the last statement in the function. And yes, that's how easy it is to accidentally write something to the output and thus turn your return value into an array.
Since I'm on a roll, 1 last example.
clear
$arr = @($null, 'hello')
$isNull = $arr -eq $null
$isNull.GetType()
OUTPUT: IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
How is the equality operator (-eq) returning an array?You see, PS has been lying to you all this time, arrays in PS aren't arrays. They're wrapper objects that pretend to be an array to give all sorts of cool magic. One of those magic things being it's propensity to forward function calls on the array wrapper to the elements themselves.
What it's actually doing is calling -eq on each element (think LINQ select) and returning a new array.
Which is useful, you can imagine having a list of COM objects with a name property, you can do a select on the name by just doing ".name" on the array wrapper itself. It has its uses.
BUT
you can't do that for any properties that are on the array (such as Length). Also, PS allows you to attach functions to objects at runtime, if you were truly evil you could attach a myriad of functions to an array object you handed back and laugh as the poor suckers using your code can't understand why calling .Name doesn't forward like it should.
----
I could go on and on and on about PS. I once built a VPS automation solution in PS. My (naive) thinking at the time was that the remoting capabilities for windows was useful so I may as well build it out in powershell. I maintained that solution for 5 years, 4.5 years in and I was _still_ getting surprised by interactions w/i PS.
Here's an exercise for the reader.
write a function that will successfully test an input parameter against null for everything. There's a solution.
My issue with powershell is that it isn't really a shell language, or rather, not a tty language. I do think it's way better than bash, but I do not want to use it like bash, I want to use it like AWK, but for my system. I want it to use it only in scripts, or with an exec in a command line at worst. I think bash have better built-in for ttys, and is faster/more reactive (that might be my windows config but I don't think so).
I want to navigate with bash, and script with powershell (which I do to be completely honest, but I'd like to do that in a windows terminal and not wsl).
How about making the installation about 90% less and dropping DCOM support. That is a dinosaur that has long out lived its usefulness. It is a constant source of security problems. DirectX needs a massive overhaul.
I still give it, like, less than 50% chance of occurring, but it wouldn’t be totally mind blowing to see MS selling a Linux distro, IMO. Why not, right?
In theory. In practice, this doesn't happen.
Overall, I'd say desktop UIs are actually Linux's greatest failing. It's dominated by two different groups (Gnome vs. KDE) with extremely different design philosophies, and both having major (but different) problems. The whole Wayland vs X thing is also part of the problem. Everything else in Linux generally works really well, which is part of why it's so successful on servers and embedded systems.
Chromebooks sell OK, right?
I am ok with Windows as thin terminal with great graphics and audio support.
As much as I loathe my days being siphoned from me all day long while being forced to use Office, I'd at least forgive them if my daily driver OS wasn't a giant ad-infested spyware app.
However...
It's my operating system. Can they not understand why people would be sensitive about this? It blows my mind that, at least, there isn't an on/off toggle in the Pro version. It's really disrespectful to those of us who care.
I think part of the problem is that it seems like an internal (corporate) push (shift?) to view it as only a "licensed" product that you're using, rather than as something you "own" on your machine.
We saw a bit of this with licensing and product validation. Now, we're seeing it with changes driven by internal (e.g.: corporate command chain) drives. They "need" this data but there's no open transparency about why they need it, where it's housed, who has access, what positive changes this data has driven (if at all), etc.
Back during the Watson or WER (Windows Error Reporting) days, that was the only "telemetry" that the company needed and they got by on quite a few versions of the OS without needing more.
I don't have an answer - but I do know that if my work didn't require Windows, I'd be happy to never see another Windows desktop again.
I paid damnit, I'm not paying twice.
* Edge is advertised when you first install Windows, but nothing forces you to use it. I use Firefox with Windows 11 and no mention of Edge appears anywhere now.
* Updates aren't weekly, except maybe security updates. And most updates these days happen unobtrusively in the background.
* They've made great progress with the new Terminal and Powershell apps. They're very good and have more-or-less all the functionality you'd be used to. If you really want more, WSL exists.
* You can turn off anything AI-related. Again, I don't see anything like that on mine.
* You never need to interact with the store, and you can remove it via command if you're really insistent on it.
Why must you use command lines to disable features which should have been opt-in, in the first place?
Why must one use a 3rd party device (e.g. PiHoles, which ARE awesome) to disable stuff — particularly when you can't even turn all telemetry off in the first place?
And for the average user, all they care about is having a web browser and access to get the applications they need.
I really don't see the harm in the MS store being present. It offers them a user-friendly way to tell people to "just go here and install X" without having to walk them through anything more complicated.
Personally, my only Windows machine runs Windows 7 Professional 64-bit [turns on once a month]. All my computers sit behind several PiHoles.
Give me the same base setup as Windows 7 but with the Windows 11 security bells and whistles.
Apple now owns the majority of the mobile+tablet+developer laptop market. Getting rid of Windows Phone was a VERY bad decision made by Nadella. A short-term gain in profitability for a long-term loss in marketshare. He completely ceded the OS/device competition and effectively made Apple the dominant cross-form-factor OS company.
IMO Microsoft can gain users back by:
* Not requiring a Microsoft Account * Ending all data/telemetry collection * Not forcing Edge on its users * Stop releasing improved UI updates every week * Make bash, zsh, ... native for Windows * Taking the AI out and making it an optional extension * Making the Microsoft Store optional
A *plus* would be to open source Windows.
I would be interested in hearing your pet peeves.