[HN Gopher] Rust for Windows
       ___________________________________________________________________
        
       Rust for Windows
        
       Author : dsr12
       Score  : 517 points
       Date   : 2021-01-21 18:37 UTC (4 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | phkahler wrote:
       | Rust needed a GUI and Microsoft provided one. They seem to be
       | very focused on giving developers what they need, but only to a
       | point. I've been doing some system glue stuff and while it's nice
       | that powershell has ssh an scp they are missing some options I
       | want. I was going to use curses with python (batteries
       | included!), only to find out it's not supported on windows.
       | 
       | It almost feels like a strategy - be standard enough to bring
       | people in, but idiosyncratic enough to lock them in.
       | 
       | I'll be using gtk-rs thank you very much.
        
         | freeone3000 wrote:
         | You'll need to install windows-curses, since cmd.exe didn't
         | support vt100 escape sequences until relatively recently, and
         | still requires a special WinRT call in order to enable them.
         | 
         | But it's a bit telling that the first hurdle you hit in running
         | python on windows was the operating systems choosing different
         | forty-year-old terminal emulator escape sequences. :)
        
           | pjmlp wrote:
           | Windows Terminal is the actual solution.
        
         | chiph wrote:
         | > They seem to be very focused on giving developers what they
         | need, but only to a point.
         | 
         | This may be a consequence of the consent decree they signed in
         | the early 2000's, where it was alleged that they used their
         | control of Windows APIs to further Internet Explorer market
         | share at the expense of other browsers. Since then they have
         | had to be careful not to act like a monopoly.
         | 
         | https://en.wikipedia.org/wiki/United_States_v._Microsoft_Cor...
         | .
        
         | dgellow wrote:
         | WSL2 has almost everything you need if Windows isn't enough
        
           | boogies wrote:
           | Yep, WSL2 is standard enough to draw some in. Its DirectX
           | support is a[n early baby] step in the direction of making it
           | idiosyncratic enough to keep them locked in (we should
           | probably expect more in the future. Right now it otherwise
           | seems to be just a VM, without a lot of non-standard stuff to
           | give it an advantage over running the more stable OS on the
           | bare metal and keeping the BSODing one contained with
           | virtualization).
        
         | alexfromapex wrote:
         | That's exactly what this is, a way to sink their proprietary
         | claws into Rust and try to influence the market the way they
         | have done with most of their software for decades.
        
           | jvanderbot wrote:
           | Microsoft has reinvented themselves, but the old hatred won't
           | die easy.
           | 
           | I'm excited for Intel to do the same, and look forward to the
           | lingering suspicion even then.
        
             | simias wrote:
             | Microsoft are a gigantic corporation, they're not the good
             | guys or the bad guys, they're collectively amoral and
             | profit oriented. That will never change.
             | 
             | Being suspicious of their actions and their intentions is a
             | very reasonable stance.
        
             | LAJdgday wrote:
             | No they have not reinvented themselves. They are ruthlessly
             | taking over OSS software projects by buying the type of
             | developers who play politics and love to command others
             | around.
             | 
             | I take it that Rust is next after Python, whose development
             | has stagnated and where the mailing lists are now censored.
        
             | rockdoe wrote:
             | The old hatred flares up every time Windows 10 asks me if
             | I'm really really sure I don't want to default Edge as my
             | browser, or "accidentally" changes it.
             | 
             | Nothing has changed.
        
             | alexfromapex wrote:
             | I disagree that they've reinvented themselves:
             | https://www.computerworld.com/article/3568009/slack-files-
             | eu...
        
               | dimitrios1 wrote:
               | The solution for this is rather simple, and until Windows
               | does it, I will always be skeptical of their renaissance
               | as some benevolent contributor to open source: open
               | source windows.
        
               | ChrisSD wrote:
               | Sure! Presumably you're volunteering to track down the
               | current rights holders for all code derived from third
               | parties and will negotiate the relicensing of their
               | contributions?
        
               | sgift wrote:
               | That the monetized IRC clone is unhappy doesn't convince
               | me that Microsoft has done something wrong. But we'll see
               | what the EU commission decides.
        
         | oaiey wrote:
         | Well they bring in the language and its runtime to windows
         | development via WinRT. They don't bring WinRT to Rust. This is
         | the windows team writing adapters for their COM API surface.
         | They do the same for C++, C#, JS and now Rust.
        
           | kyriakos wrote:
           | JS? can you point me to that?
        
           | ptx wrote:
           | Didn't they remove the JavaScript WinRT projection?
           | 
           | The docs[1] describing how to call a WinRT component from JS
           | say: _Universal Windows Platform (UWP) projects are not
           | supported in Visual Studio 2019. See JavaScript and
           | TypeScript in Visual Studio 2019. To follow along with this
           | section, we recommend that you use Visual Studio 2017. See
           | JavaScript in Visual Studio 2017._
           | 
           | [1] https://docs.microsoft.com/en-us/windows/uwp/winrt-
           | component...
        
           | Spivak wrote:
           | For people who have not lived in the Windows world this would
           | be like GNOME writing Rust Glib bindings.
        
         | Already__Taken wrote:
         | curses specifically is majorly antithetical to how powershell
         | and by extension Windows/server has decided to evolve. infact
         | text-based UI is the reason CMD.exe cannot and will not ever be
         | improved.
         | 
         | munging anything around with text very much not the Windows
         | way. For better or worse.
        
         | mwcampbell wrote:
         | > I'll be using gtk-rs thank you very much.
         | 
         | Please be aware that if you do this, your application won't be
         | accessible with screen readers or other assistive technologies
         | on Windows and Mac. At least not now. Maybe I'll have time to
         | implement GTK accessibility backends for those platforms
         | someday.
        
           | Blikkentrekker wrote:
           | Screen readers rely on some kind of toolkit a.p.i.?
           | 
           | I would assume they would simply read the screen. Are they
           | thus not capable of, for instance, reading a picture?
           | 
           | They should not be called "screen readers" but "text to
           | speech" if they not actually read the screen on a bitmap
           | level.
        
             | riquito wrote:
             | Screen readers, despite the name, don't do OCR, they access
             | informations provided by the GUI toolkit (which is one of
             | the vastly improved area in GTK 4 Afaik).
        
               | Blikkentrekker wrote:
               | Then why don't actual screen readers exist when a.i.'s at
               | this point can practically solve captcha's by enhancing
               | the reflexion in the eyes of a highly compressed jpeg and
               | reading the text in there?
               | 
               | Certainly there would be significant demand for a
               | sightless man to be able to read the dankest memes from
               | pictures?
        
               | danShumway wrote:
               | > Then why don't actual screen readers exist when a.i.'s
               | at this point can practically solve captcha's
               | 
               | Training a computer to solve a captcha is a lot easier
               | than training a computer to understand interface
               | conventions.
               | 
               | There isn't an AI that can look at a jpeg screenshot of
               | an interface and say, "there's two input elements, and it
               | looks like they're grouped together and control the list
               | to the left of them, and one of them is selected, which I
               | can tell because it has some kind of subtle glow effect
               | on it, but not the glow effect you would get if you
               | moused over it."
               | 
               | There's nothing that can realistically do that today, and
               | it wouldn't be fast enough or performant enough for low-
               | powered cell phones and laptops even if it did exist.
               | 
               | If you're just looking at describing pictures
               | themselves... sure, Facebook does auto-generate alt tags
               | for images if you forget to put one in. And Youtube auto-
               | generates captions. Those are valuable services, but they
               | have a lot of glitches and mistakes. If you're a blind
               | reader, you'd prefer not to have that experience when
               | you're using a piece of software, you'd prefer something
               | that just works reliably.
               | 
               | It's the same reason you probably used a keyboard to type
               | this comment instead of speech to text. Speech to text is
               | useful in some cases, but not good enough or accurate
               | enough that you would want to use it as your main input
               | method.
        
               | mwcampbell wrote:
               | Some screen readers can do OCR on a specific part of the
               | screen (e.g. an unlabeled image) on request. But while
               | OCR is useful for getting text out of an image, most
               | implementations can't discern the structure of a UI, e.g.
               | which part is a button, which part is an edit box, etc.
               | Also, OCR is typically done just once on-demand, not
               | continuously as the screen changes.
               | 
               | However, VoiceOver for iOS has a new feature called
               | screen recognition, which is exciting because it
               | overcomes these limitations and provides some level of
               | access to applications that are otherwise inaccessible.
               | Hopefully other platforms will catch up.
               | 
               | Even then, true screen reading will be much more CPU-
               | intensive than what screen readers currently do. And
               | anyway, it's not here yet, except on iOS. So I will
               | continue to warn developers away from toolkits that are
               | inaccessible, in hopes that some blind person somewhere
               | will be spared the pain of being blocked from doing a
               | task because of an inaccessible application.
        
             | danShumway wrote:
             | Converting bitmaps to text isn't enough to make an
             | interface usable. You need to be able to quickly convey the
             | structure of the interface and what controls are available,
             | and to do that well you need some kind of semantic insight
             | into the interface.
             | 
             | Screenreaders don't just read text, they control the
             | interface itself using standardized keyboard shortcuts and
             | input components within whatever graphical framework you're
             | using, and they communicate what that interface is using a
             | set of standardized terminology.
        
               | Blikkentrekker wrote:
               | I indeed am imparted that the term "screen reader" is a
               | misnomer and not what I expected it to be.
               | 
               | This seems to be more so an "accessibility suite" of
               | which text-to-speech is a component rather than what I
               | would call a "screen reader".
        
               | danShumway wrote:
               | Sorry, I guess? It's been an industry standard phrase for
               | a pretty long time. Screenreaders probably have a
               | historical reason why they're named the way they are, but
               | the short version is that's just what everyone started
               | using. A lot of software terminology is like that, it's
               | weird to people who are unfamiliar with it because
               | there's no central committee somewhere that decides what
               | everything should be named.
               | 
               | If you're trying to do a search online for the kind of
               | tool you're looking for, probably the phrase you would
               | want to search for is "OCR software", short for Optical
               | Character Recognition, or if you're trying to tag images
               | just straight-up "image recognition."
        
             | [deleted]
        
             | simias wrote:
             | What you describe might be more robust in some situations
             | but vastly less for software designed to be accessible.
             | Take "alt" attributes in HTML img tags for instance, or
             | various metadata attached to buttons that use an icon
             | instead of text (like a play button, or a X close button
             | and similar things).
             | 
             | You can see an example next to this very comment actually:
             | the up and downvote buttons won't be accessible with OCR,
             | but they have "title" attributes describing what they are.
             | And consider that there's more to understanding a given
             | user interface that raw text: radio buttons are tied to
             | certain labels, there's hierarchy, all sorts of layout cues
             | that would be opaque to a screen reader.
             | 
             | I suppose that ideally you'd want both: use native
             | accessibility data if available, fallback to OCR when
             | there's no alternative.
        
           | phkahler wrote:
           | Yet another reason for them to do this. Not just a GUI for
           | Rust, but the only accessible one. It really is a solid
           | strategic offering to bring Rust developers to their Windows
           | platform. But IMHO developers who do are trading tomorrow for
           | today.
        
             | mwcampbell wrote:
             | Actually, Qt is also accessible (more or less) on all the
             | desktop platforms, so that's another option.
        
               | Shared404 wrote:
               | Is there a good way to use Qt from Rust?
               | 
               | I looked the other day, but couldn't figure it out.
        
               | varajelle wrote:
               | https://github.com/woboq/qmetaobject-rs
        
           | ddevault wrote:
           | This only matters if you care about propiretary platforms
           | like Windows and Mac. And you should not care!
        
             | mwcampbell wrote:
             | I still do, because people are stuck with these platforms,
             | for reasons beyond our control, and I care more about
             | people's access to applications that they need than about
             | being a purist.
        
             | rodgerd wrote:
             | "Fuck people who need assistive technologies" does not make
             | you a good person.
        
               | kiawe_fire wrote:
               | More like "fuck people who use Mac OS or Windows".
               | 
               | I saw no malice there directed at users of assistive
               | technology, but rather of users of non-open platforms.
        
               | kevingadd wrote:
               | If the assistive technology they need to use isn't
               | available on Linux or they don't have the ability to run
               | Linux it's not that meaningful of a difference.
        
         | mumblemumble wrote:
         | I do think it is a strategy, but I think it's a rather simpler
         | one than that: basic work triage and scope management.
         | 
         | ssh and scp make sense to put into powershell, because they're
         | everyday sysops things. curses is pretty posix-specific, and
         | apps that use it are likely to need other posix stuff, so
         | handle that with WSL rather than unnecessarily re-inventing a
         | wheel.
        
           | koheripbal wrote:
           | Never attribute to malice what can be adequately explained by
           | incompetance, laziness, or limited resources.
        
             | nitrogen wrote:
             | It's hard to forget that Microsoft's official, documented
             | policy for a very long time was Embrace, Extend, and
             | Extinguish.
             | 
             | It all feels _very_ vaguely analogous to the West 's
             | relations with China and Russia -- both China and Russia
             | appeared very open for a time, and then closed back down
             | after gaining enough leverage.
        
         | heavyset_go wrote:
         | > _I 'll be using gtk-rs thank you very much._
         | 
         | How well does gtk-rs work as a cross-platform GUI library? I
         | know it works well on Linux, but I haven't tried it on macOS or
         | Windows.
         | 
         | If anyone has experience using it for cross-platform
         | development, I'd love to hear about it.
        
           | Macha wrote:
           | It works. The windows theme is a little dated, but Windows
           | users are used to a random mishmash of inconsistent styles,
           | so likely won't cause complaints. On Mac, well actually I
           | haven't personally tried it on Mac, just Windows/Linux, but I
           | hear a lot of vocal complaints about GTK not fitting in from
           | mac users. I'm not sure this means it's worse than on
           | Windows, I think Mac users just expect more.
        
       | skybrian wrote:
       | Does this automatically generate safe API's as expected for Rust?
       | If so, I wonder how they manage it? Did their metadata format
       | have to be extended to describe the constraints on Rust callers
       | and callbacks?
        
         | ChrisSD wrote:
         | It does not generate safe bindings. Currently the metdata is
         | scrapped from Windows headers which don't have all the
         | necessary information to go that far. In the future the
         | metadata could be improved. The metdata format is the same as
         | used by .NET and WinRT.
        
       | nn3 wrote:
       | Wish there was something like this for Linux too. Rust system
       | programing on Linux consist of dealing with a dumpster fire of
       | badly implemented and incomplete wrapper crates for the kernel
       | interfaces.
        
         | bluejekyll wrote:
         | I assume you're talking about more than just libc. Many of the
         | Linux specific facilities are captured in higher-level cross
         | platform implementations, like mio abstracts over kqueue on BSD
         | and epoll on Linux.
         | 
         | What are the APIs you're interested in that are missing or of
         | poor quality?
        
       | brundolf wrote:
       | Very cool to see the start of official support. Unfortunately it
       | looks like it requires unsafe { } for now, though maybe it's
       | intended as a low-level foundation on which a higher-level, safer
       | API can be built
        
         | coldtea wrote:
         | > _Unfortunately it looks like it requires unsafe { } for now_
         | 
         | Forever, and not "unfortunately" but rather as expected and
         | necessary. Windows API is unsafe (C/C++) itself, and this is a
         | wrapper for it.
        
           | wtetzner wrote:
           | Sure, but safe wrappers can be written around unsafe APIs.
        
         | _zamorano_ wrote:
         | Well, the Windows API is "unsafe" by design, is C-based, you
         | pass pointers around, datatype sizes, etc... How can you avoid
         | "unsafe" in this scenario? You're asking for a new framework or
         | an API rewrite
        
           | Blikkentrekker wrote:
           | Unix libc is also unsafe, but the _Nix_ crate mostly built a
           | safe, _Rust_ -esque interface around this and abstracted most
           | of the types so that they are safe.
        
           | brundolf wrote:
           | The domain itself isn't fundamentally unsafe, only the way
           | the C API has been designed. You're right that meaningfully
           | different abstractions (instead of a one-to-one translation)
           | may be required to make a safe API, which is why I suggested
           | that could be a possibility.
        
             | dialamac wrote:
             | > The domain itself isn't fundamentally unsafe
             | 
             | This makes no sense to me, what you're saying here. You
             | pass raw pointers to the Windows API for one, for which it
             | makes no safety guarantees. Short of rewriting Windows from
             | scratch I don't see how this isn't a fundamentally unsafe
             | domain. Sure you could put more and more wrappers up on top
             | (it's not an even an issue of one-to-one translation, but
             | how resources such as memory are wrapped), but whatever
             | binding there is pretty much must be unsafe.
             | 
             | That it's possible to write a safe wrapper is kind of
             | obvious.
        
             | Spivak wrote:
             | But that wouldn't eliminate the need for unsafe code at the
             | border. All ffi calls are inherently unsafe to Rust. You
             | can design the cleanest nicest safest C api in the world
             | but it's still unsafe as far as Rust is concerned.
        
               | brundolf wrote:
               | Yes, but in Rust there are two independent axes here:
               | 
               | - Whether or not a library calls unsafe code internally
               | 
               | - Whether or not a library declares its public API to be
               | unsafe (https://doc.rust-lang.org/book/ch19-01-unsafe-
               | rust.html#call...)
               | 
               | It's very much possible (essential, even) to be able to
               | present a safe API to external callers of your code,
               | despite using unsafe code under the hood. In this case
               | you're making a human-checked assertion of safety, which
               | is not guaranteed to be without bugs, but the important
               | thing is that you're minimizing the surface area of un-
               | safety and declaring a contract with your users. You're
               | "stopping the buck" of unsafety rather than passing it
               | on. The parts that really have to be unsafe can enjoy
               | extra scrutiny, and everything else (including the
               | caller's code) can be checked by the compiler. This is
               | not uncommon in the standard library and other low-level
               | libraries.
               | 
               | More information here: https://doc.rust-
               | lang.org/book/ch19-01-unsafe-rust.html#crea...
        
               | josephg wrote:
               | Sure. So this library exposes all of Microsoft's DLL
               | surface area in an API-native way. That's important.
               | 
               | Now that it's released, library authors can wrap this
               | with another library, which abstracts over win32,
               | reexposing it in safe rust. Wrapper libraries like that
               | almost certainly won't cover 100% of the api surface area
               | - there are _so many_ functions in the windows APIs.
               | 
               | Anyway, give it time. People will wrap this with safe
               | rust.
        
               | brundolf wrote:
               | Which is exactly what I suggested in my original comment
               | :)
        
               | MereInterest wrote:
               | Yes, but those unsafe blocks can be wrapped into the
               | library. "Unsafe" doesn't inherently mean "bad", it just
               | means that the programmer is explicitly taking the burden
               | of making sure that the normal invariants still hold. So
               | long as the library authors ensure that, then the
               | "unsafe" blocks remain within the library and don't need
               | to be worried about by the users of the library. On the
               | other hand, if a library pushes that additional
               | responsibility to me, it makes me more worried.
        
             | amluto wrote:
             | This ought to be doable automatically, at least a lot
             | better than the current code:                   let event =
             | CreateEventW(              std::ptr::null_mut(),
             | true.into(),              false.into(),
             | std::ptr::null(),          );
             | 
             | The .into() is silly but tolerable. But the first parameter
             | is a pointer to a struct, and it's clear enough from the
             | signature that a reference would work. It could be mut to
             | be on the safe side. (Yes, this involves someone making
             | sure that the API doesn't retain the pointer.). The last
             | argument is, per the prototype, is a string. Admittedly,
             | the Windows API has a truly horrible idea of what a string
             | is, but surely they could do better than using a pointer.
        
               | steveklabnik wrote:
               | Both of these parameters can be null, and references
               | cannot be null, so it is not possible to use references
               | directly without losing some functionality.
               | 
               | (They could remove the intos if they wanted to, I agree
               | it feels kind of weird but I'm not actually sure if doing
               | it is better or worse, I am conflicted.)
        
               | Cu3PO42 wrote:
               | It could very well be Option<&mut T>, though. Personally
               | I think having a 1:1 mapping to the C API is reasonable
               | enough as a first target. It should make porting code
               | easy and referencing the official documentation is
               | probably easiest this way.
               | 
               | No matter how many heuristics they apply to make a
               | somewhat more idiomatic mapping, it'll never feel right
               | until it's manually designed to fit with Rust
               | conventions. So I'm okay with it as it is now and can
               | hope for a much thicker abstraction in the future.
        
               | orra wrote:
               | Option<T> would sensibly solve the nullability?
        
               | steveklabnik wrote:
               | There are a few different possibilities, and some of them
               | involve Option, yes. But doing this would still possibly
               | create an annotation burden that the parent is
               | complaining about.
               | 
               | My comment was trying to be pretty narrowly scoped to
               | "why not use a reference here." You and your sibling are
               | both right in ways!
        
               | orra wrote:
               | Fair enough, and gotcha. Thanks.
        
               | johnsoft wrote:
               | A pointer->reference transformation is not always
               | correct, because in C, arrays are also passed as
               | pointers. Example: https://docs.microsoft.com/en-
               | us/windows/win32/api/winuser/n...
        
         | mmastrac wrote:
         | Lower-level APIs like this are usually unsafe, with second-
         | level libraries providing the safe abstractions over them.
        
           | [deleted]
        
           | MaxBarraclough wrote:
           | Someone replied and then deleted their comment, but I'll
           | reply to it anyway. They wrote:
           | 
           | > This is the safe abstraction! I mean it's a pretty
           | mechanical translation but it's nonetheless as safe as Rust
           | will ever consider it.
           | 
           | No, it's not safe. Assuming I understand Rust correctly: if
           | your bindings allow Rust programmers to trigger undefined
           | behaviour even when they restrict themselves to the safe
           | subset of Rust, that means that either your bindings have a
           | defect, or the underlying (wrapped) library has a defect.
        
             | mmastrac wrote:
             | Yes, exactly. It'll be pretty unlikely that raw API
             | bindings can be made safe (even for APIs that just take raw
             | integer handles - you could double-close one and cause
             | corruption/etc).
        
             | simias wrote:
             | I've seen some discussions on HN in the past where some
             | rustaceans have argued that it's fine to expose raw C APIs
             | in Rust using safe interfaces even if they're fundamentally
             | unsound. I fail completely to understand the reasoning
             | behind that (and I've really tried) but apparently it's
             | still an open debate to some extent.
        
               | MaxBarraclough wrote:
               | How disappointing.
        
         | mamcx wrote:
         | Look this way: All C/C++ programs, all of them, forever, are
         | unsafe by default.
         | 
         | Even if a sanitizer, linker, review by the absolute most
         | skilled developer on earth check every line.
         | 
         | Because C/C++ is designed without safety. So, Rust can't
         | "believe" the external world is safe because the external world
         | is made unsafe.
        
           | brundolf wrote:
           | https://doc.rust-lang.org/book/ch19-01-unsafe-
           | rust.html#crea...
        
       | Maledictus wrote:
       | I'd say this marks the beginning of the `extend` phase.
        
         | Maledictus wrote:
         | For those who don't remember:
         | https://en.wikipedia.org/wiki/J/Direct
        
       | diego_moita wrote:
       | For Mac fans, the closest you'll have to this in OS-X is core-
       | foundation-rs[1], by the servo team.
       | 
       | [1] https://github.com/servo/core-foundation-rs
        
         | edko wrote:
         | Thanks for the link. Do you know of any examples that use this
         | crate that would be easy enough for a beginner to start
         | learning how to use it?
        
       | Keyframe wrote:
       | Any pointers / way for cross-compiling on linux for windows?
       | 
       | Now Apple for MacOS and iOS, Android and maybe game consoles and
       | Rust is a 1st class citizen!
        
       | cletus wrote:
       | The lesson from Microsoft I think is that the fish really does
       | rot from the head. Put another way: who the CEO is really does
       | matter. We have night and day here with Ballmer compared to
       | Nadella.
       | 
       | Credit where credit is due: Microsoft has really been doing a lot
       | to try and rebuild their credibility when it comes to the
       | developer community. Off the top of my head I can think of
       | TypeScript, open sourcing .Net, WSL and now this.
       | 
       | Oh and they haven't done an Oracle or a Cisco (or, let's face it,
       | a Google at this point) with their acquisition of Github by
       | letting it die on the vine or with hostile forced integrations.
       | 
       | Kudos.
        
       | codeflo wrote:
       | As someone who writes Windows software now and then, I'm
       | genuinely excited. I tried using this early, when it was limited
       | to WinRT bindings. It looked promising, but compile times were
       | prohibitive. It seems like they now include a build.rs and have
       | clear recommendations around caching -- I hope this solves the
       | problem. Has anyone tried a recent version?
        
         | hehehaha wrote:
         | Wow! Almost want to make Windows App now just for fun.
        
       | AndrewGaspar wrote:
       | Since Windows ships a stable ABI, why does this project need to
       | generate the bindings at build time? Couldn't all of the bindings
       | be pre-generated, eliminating the build-dependencies?
        
         | steveklabnik wrote:
         | https://www.reddit.com/r/rust/comments/l23fr7/rust_for_windo...
        
       | Thaxll wrote:
       | For someone not familliar with Windows API, why does creating a
       | Windows needs unsafe and other low level things? I guess it's the
       | same for the C++/C# version?
       | 
       | https://github.com/kennykerr/samples-rs/blob/master/create_w...
        
         | metalliqaz wrote:
         | It's a call out to Windows libraries that long predate Rust,
         | and they are implemented in (mostly) C++. They don't provide
         | any of the safety features on any data structure you pass to
         | it. I don't see how it could be anything other than unsafe.
        
           | Blikkentrekker wrote:
           | Yet the _xcb_ bindings in that crate are mostly safe:
           | https://rtbo.github.io/rust-
           | xcb/xcb/xproto/fn.create_window....
           | 
           | They have provided nontrivial wrappers, wrapping _xcb_
           | datatypes so to make them safe and uphold the invariants.
           | 
           | I don't know much of any _Windows_ interfaces, but I doubt
           | this would be impossible there too; they simply did not do
           | so.
        
             | tadfisher wrote:
             | Does it actually wrap libxcb, or does it generate bindings
             | from the XCB protocol descriptions (XML)? I would think the
             | latter would be less work and higher quality.
        
               | Blikkentrekker wrote:
               | I don't know how it's achieved, but as I look at the
               | bindings for this _Windows_ a.p.i they return all sorts
               | of raw pointers and other things, whereas in _XCB_
               | bindings for _Rust_ wrap the types in a _Rust_ -friendly
               | way so almost all of them are safe.
               | 
               | This _Windows_ a.p.i. in _Rust_ seems of a frankly
               | atrocious design and most of the functions seem simple
               | `extern  "C"` declarations rather than actual attempts at
               | proper wrapping.
        
               | infogulch wrote:
               | I don't think that's a fair characterization. Most safe
               | rust wrapper libraries are built in two layers: 1. Map
               | the api's raw interface into raw rust types, usually with
               | a simplistic code generator; this enables the bindings to
               | closely track upstream api changes. 2. Use that raw
               | interface to build a wrapper library that translates the
               | api to use rustlike idioms and expose safe constructs.
               | 
               | This seems to be #1 only for now, which is fair because
               | winapi is enormous. Also there may be many ways to expose
               | a safe rust interface all with different tradeoffs, by
               | leaving #2 open they don't lock in a single strategy
               | prematurely. That said I am looking forward to a safe
               | wrapper as well.
        
             | metalliqaz wrote:
             | The Windows API is a sprawling mess.
        
               | Blikkentrekker wrote:
               | I really doubt that would have anything to do with
               | whether or not the binding wrote safe, _Rust_ -esque
               | wrappers or not.
        
         | [deleted]
        
         | steveklabnik wrote:
         | Anything not defined in Rust needs to be marked as unsafe,
         | because Rust cannot understand non-Rust code. FFI bindings are
         | inherently unsafe.
        
           | ywei3410 wrote:
           | On a side-note; do you know of any good resources where
           | someone tries to wrap a non-trivial C wrapper where they go
           | over common C idioms and ways to provide a (safer) API inside
           | Rust without too much overhead?
           | 
           | I've always found it to be incredibly difficult because of
           | the number of gotchas which can leak into causing a segfault
           | in Rust; it's immensely frustrating.
        
       | roblabla wrote:
       | I was curious how this worked: The previous iteration of this
       | only worked for WinRT API, and this new crate seemed to also work
       | by generating code from WinMD files. But WinMD files only
       | contained definitions for WinRT/COM APIs, so how could this
       | possibly work?
       | 
       | Well turns out, microsoft started a project to also generate
       | Win32 API information in WinMD file, to generate APIs from them
       | automatically for all native languages! See win32metadata[0].
       | This could make interfacing with win32 APIs a lot more
       | convenient!
       | 
       | https://github.com/microsoft/win32metadata
        
         | ROARosen wrote:
         | Does that meant it's compatible with any other language?
        
           | roblabla wrote:
           | Any language that can call C ABI and support the necessary
           | datastructures, yes. That's the point of win32metadata.
        
         | Arnavion wrote:
         | So does this generator need access to the .winmd files at build
         | time to be able to generate the bindings? Are they available
         | for non-Windows builders?
        
           | roblabla wrote:
           | The WinMD files are shipped with windows-rs. You can find
           | them here[0]. For cross-compilation use-cases, the main
           | blocker is [1].
           | 
           | [0] https://github.com/microsoft/windows-
           | rs/tree/master/crates/w...
           | 
           | [1] https://github.com/microsoft/windows-rs/issues/142
        
       | g051051 wrote:
       | Welcome back, J/Direct!
       | 
       | https://en.wikipedia.org/wiki/J/Direct
        
         | pjmlp wrote:
         | P/Invoke, it never went away.
        
       | jdlyga wrote:
       | Wow, I thought by the name this would be an awkward Windows
       | distribution of Rust packaged in an MSI. I'm pleasantly
       | surprised. Microsoft has become one of the best big tech
       | companies for open source in the past few years.
        
       | Animats wrote:
       | Will this work when cross-compiling from Linux? That's supported
       | by Rust.
        
         | monocasa wrote:
         | I don't see why not, the winapi crate is.
        
           | roblabla wrote:
           | The winapi does a lot of work to support that use-case.
           | Importantly, it ships (mingw) import libraries to allow
           | linking against windows libs from linux trivially[0].
           | 
           | EDIT: windows-rs doesn't yet support cross compilation as
           | easily as winapi. Here's the issue tracking it:
           | https://github.com/microsoft/windows-rs/issues/142
           | 
           | [0]: https://github.com/retep998/winapi-
           | rs/tree/0.3/x86_64/def
        
           | Arnavion wrote:
           | The question is valid. The winapi crate binds the functions
           | in the Windows headers explicitly. You can call
           | `winapi::...::CreateEventW` because winapi has a `pub extern
           | unsafe fn CreateEventW(...)` in its code.
           | 
           | This new crate is a generator. If this new generator requires
           | access to the .winmd files or .h files from the SDK or
           | whatever, where is the non-Windows builder going to get those
           | from? And will this generator look for them there?
           | 
           | For example, I used to maintain a generator that took COM
           | typelibs and generated Rust bindings for them, but it
           | required calling into the Windows API for working with
           | typelibs and thus obviously required a Windows builder. The
           | functionality of this crate is split between the windows_gen
           | and windows_macros crates, and from a cursory glance I could
           | not tell how it works wrt win32 bindings.
           | 
           | Edit: Answered by
           | https://news.ycombinator.com/item?id=25863581 - the win32 API
           | is now also described by .winmd files.
           | 
           | So the question is, can a non-Windows builder get these
           | files, and then convince this crate to look for them wherever
           | it placed them?
        
             | orra wrote:
             | > So the question is, can a non-Windows builder get these
             | files, and then convince this crate to look for them
             | wherever it placed them?
             | 
             | Yes, there's actually a prebuilt Windows.Win32.winmd file
             | in the repo, underneath .windows/.
        
             | dguaraglia wrote:
             | > This new crate is a generator. If this new generator
             | requires access to the .winmd files or .h files from the
             | SDK or whatever, where is the non-Windows builder going to
             | get those from? And will this generator look for them
             | there?
             | 
             | From memory (I haven't done Windows development in
             | forever): there's a few projects that try to provide an
             | open source version of the Windows API headers. The MingW
             | project, for example, has a full set of drop-in replacement
             | headers (meaning you can take code that compiled with
             | Visual C++ and compile it directly with MingW's GCC and it
             | should 'just work'). The LCC-Win64 project has a similar
             | set of headers.
             | 
             | Does that answer your question?
        
               | Arnavion wrote:
               | Headers are irrelevant. We're talking about .winmd files.
        
         | est31 wrote:
         | https://github.com/microsoft/windows-rs/issues/143#issuecomm...
         | 
         | > we could support this in future, but it is not an immediate
         | goal. If this is something that folks would like to do, feel
         | free to chime in on this issue and let us know.
         | 
         | Note that most of Microsoft regards Linux mainly as a server
         | OS. You are not supposed to use it on the desktop, instead you
         | should use Windows there.
        
           | reader_mode wrote:
           | Even if that's true you really don't want to run a Windows
           | box as a build server - licensing and security and all that.
        
           | phkahler wrote:
           | >> Note that most of Microsoft regards Linux mainly as a
           | server OS. You are not supposed to use it on the desktop,
           | instead you should use Windows there.
           | 
           | Then what's the point of WSL? To allow server software
           | development on a Windows desktop? OK. But then what's the
           | point of trying to bring DX graphics to linux?
        
             | paavohtl wrote:
             | To run Tensorflow and other ML libraries in WSL.
        
       | Erlangen wrote:
       | I kind of expect it to be called "Windows for Rust".
        
         | joshuaissac wrote:
         | Or maybe "Windows API for Rust".
        
           | levesque wrote:
           | Rusty Windows?
        
             | medium_burrito wrote:
             | Tetanus
        
             | [deleted]
        
         | kaoD wrote:
         | I thought your comment was a tongue-in-cheek reference to
         | Windows Subsystem for Linux and then I clicked the link.
        
         | [deleted]
        
         | SloopJon wrote:
         | I had the exact same thought. I almost didn't bother following
         | the link, because Rust for Windows is already a thing, but this
         | is essentially a Rust equivalent to C++/WinRT.
        
           | steveklabnik wrote:
           | To be clear, it's a bit broader than that. WinRT is a
           | specific subset of windows APIs, and the Rust bindings for
           | that have existed for a while. This is for _all_ Windows
           | APIs.
        
       | edko wrote:
       | I wonder if this would allow using a WebView2 from Rust? I've
       | searched the repository, but was not able to find it.
        
         | zRedShift wrote:
         | Search everything here: https://microsoft.github.io/windows-
         | docs-rs/doc/bindings/win...
        
       | mwcampbell wrote:
       | Kenny Kerr's blog post on this may also be of interest. In
       | particular, it answers the question I was going to ask about how
       | they're handling Win32 and WinRT in a unified way.
       | 
       | https://kennykerr.ca/2021/01/21/rust-for-windows/
        
         | jug wrote:
         | I wonder if Rust is becoming Microsoft's way forward for
         | development rather than C++ (i.e. Rust for Windows rather than
         | C++ for Win32), leaving .NET for higher level development? The
         | bold introduction in the blog post surprises me, coming from
         | Microsoft themselves who're right now hard at work on these
         | individual and ununified technologies.
        
       | mhh__ wrote:
       | D has fairly extensive windows API support, and the usual PE
       | gubbins. Worth taking a look at
        
         | gabereiser wrote:
         | Yes but the topic of discussion is rust here. D is awesome, but
         | we are talking about the windows bindings for rust being "just
         | good enough".
        
         | vlang1dot0 wrote:
         | Rust has had that for a long time as well. This is first-party
         | support from Microsoft for Rust in contrast to community
         | supported options like in D.
        
         | MaxBarraclough wrote:
         | Link: https://wiki.dlang.org/D_for_Win32
         | 
         | Ada has something similar: https://github.com/AdaCore/win32ada
        
         | bluejekyll wrote:
         | Are these D bindings relevant to Rust developers? Or asked
         | another way, is there some reason that the D bindings would be
         | better to use than these native ones in Rust?
        
           | mhh__ wrote:
           | When I am writing or choosing (or bindings to) an API I
           | always go and look at other languages (especially what the
           | functional people do) to avoid repeating non-obvious mistakes
           | and seeing where the impedance mismatches are.
           | 
           | Most recently, I've been playing with eBPF on Linux: The
           | system call API is terse and pretty impenetrable, whereas the
           | high-level APIs either mean writing gadgets in C with a
           | nearly-blind debugging experience or relying on a library to
           | retain the power of the featureset the kernel exposes.
        
           | komuher wrote:
           | This is the same stuff like julia community is doing. Spam
           | language in every Python/R related topic (D guys target
           | Nim/Rust)
        
             | mhh__ wrote:
             | It's hackernews not rustnews, though.
        
         | mmastrac wrote:
         | Sorry, I had to look up "gubbins":
         | 
         | British : fish parings or refuse broadly : any bits and pieces;
         | gadgets, gadgetry the gubbins for changing a tire all the
         | navigational gubbins
        
           | GordonS wrote:
           | I wasn't aware of the dictionary definition :)
           | 
           | As the GP used it, it means "and what not", "and such like"
           | etc.
        
       | type0 wrote:
       | Can we expect to get a better compilation time with this?
        
       | seertaak wrote:
       | This is really cool. Kudos to Microsoft for really getting open
       | source lately. I wrote an app (which failed miserably) called
       | zenaud.io . When I started writing the app, Apple was hands-down
       | a better developer experience. Now, it's the exact opposite --
       | MacOS is increasingly painful, throwing up more and more
       | roadblocks and constricting their platform ever more. And Visual
       | Studio is better than Xcode IMO.
       | 
       | Also, as a C++/Python dev - it's increasingly hard not to notice
       | the awesome momentum Rust has garnered.
        
         | blub wrote:
         | Apple are throwing more roadblocks at least partly because
         | developers are becoming more and more deplorable, trying to
         | claw every penny they can by collecting and selling every bit
         | of metadata (or even data) they can get their claws on.
         | Microsoft aren't throwing similar roadblocks at least partly
         | because they're one of the deplorables people need protection
         | from.
         | 
         | All big software corporations use open source strategically:
         | keep the core money-makers closed, release tooling and other
         | trinkets for developers so that they do some free advertising
         | for the company. They also release expensive-to-develop
         | software for free to destroy competitors and expand their
         | influence.
        
         | girvo wrote:
         | I am an Apple/Linux diehard, but Visual Studio has always been
         | superior to Xcode imho.
        
         | bezout wrote:
         | OT: I must agree about your comparison of macOS and Windows.
         | IMO Microsoft is doing a lot to improve the developer
         | experience. WSL2 is so freaking good. It has its quirks and it
         | has issues with some workflows, but I'm thinking about moving
         | out of macOS after having tried it.
         | 
         | Apple may have the fastest processor, but Microsoft has the
         | most comfortable tools. Both companies are not perfect, but if
         | we must choose the lesser evil...
        
           | jhoechtl wrote:
           | Unleash all your handcuffs and move directly to Linux. It
           | will be really refreshing!
        
           | cpeth wrote:
           | "Apple may have the fastest processor, but Microsoft has the
           | most comfortable tools. Both companies are not perfect, but
           | if we must choose the lesser evil..."
           | 
           | It's very fast for a low power, laptop-focused processor and
           | even then only truly excels at single-threaded workloads.
           | It's out classed by AMD mobile offerings (4900HS and 4800U)
           | in multi-threaded workloads on most tests[0]. If you step up
           | to desktop processors, the top end processors like the AMD
           | 5950X are in a different class of multi-threaded performance.
           | 
           | Don't get me wrong, it's an exceptional processor and
           | incredibly fast for its sub-25W TDP.
           | 
           | [0] - https://www.anandtech.com/show/16252/mac-mini-
           | apple-m1-teste...
        
             | caycep wrote:
             | This is simply a matter of adding more cores...I mean, I
             | would hope the 5950x with its 16 full strength cores would
             | be better than an M1 with it's big/little design...
        
           | chx wrote:
           | > WSL2 is so freaking good.
           | 
           | I am on WSL1 two things hold me back from upgrading
           | 
           | 1. How's networking? I go on and off VPNs quite a bit.
           | 
           | 2. How's cross system access to files especially performance
           | wise? I edit with phpstorm for windows, I share the files
           | with Slack also windows, I access the same files with WSL
           | git, LAMP stack and more.
        
             | kyriakos wrote:
             | 1. Just works. Only issue I found is that Wsl2 will not
             | update its dns resolver IPs when connecting to the vpn.
             | There's a workaround script. So it's either exit the
             | terminal and re enter it or run the script to update them.
             | 
             | 2. This is my current pain. Windows file system is slow
             | already and accessing it from wsl adds an overhead. Ideally
             | I keep projects in Wsl2 storage and IDEs in Windows. I
             | searched a lot for a solution but haven't found one. On the
             | other hand, Wsl2 Linux storage speed runs circles around
             | wsl1.
        
               | peschkaj wrote:
               | I use X410 and run tools from inside of WSL2 by exporting
               | the display. Works well for Emacs, JetBrains Rider, and
               | every other GUI application I've tried so far.
        
               | girvo wrote:
               | That sounds excellent: I'll have to give it a shot.
               | VSCode under WSL2 with its Docker support is neat, but
               | can be slow due to the storage system overhead. This
               | might solve that for my team!
        
               | naikrovek wrote:
               | Concur. X410 is great and survives where xming and vcxsrv
               | both crash for me. It's not free but the "not crashing"
               | feature makes it well worth the $10 I paid for it.
        
           | TheOperator wrote:
           | Buying Microsoft for it's OS and Apple for it's hardware?
           | What is this opposite day?
        
           | hctaw wrote:
           | > Apple may have the fastest processor, but Microsoft has the
           | most comfortable tools.
           | 
           | It doesn't matter how fast the M1 is if XCode can't keep up
           | with modern development tools. I don't understand how Apple
           | developers produce any software with it, the experience is
           | truly awful compared to nearly every alternative. It's slow,
           | buggy and inscrutable. How long does it take to onboard a
           | fresh grad at Apple, I wonder?
        
             | kenjackson wrote:
             | I have an existing app in Swift and Interface Builder. I
             | hate xCode. Simple things like deploying the app to a
             | device is hit or miss (usually miss). Is there a
             | development environment that I could use for my app which
             | is better? Happy to use any platform (MacOS, Linux,
             | Windows).
        
               | hctaw wrote:
               | App Code is probably the only thing worth checking out.
               | Swift isn't a useful language outside of the Apple
               | ecosystem and interface builders come and go, usually go
               | (design in Figma/Adobe products, implement in Code rather
               | than UI wysiwyg)
        
           | seertaak wrote:
           | Indeed, WSL2 is pretty cool. Also, Windows Terminal is
           | actually pretty sweet, and I even gave PowerShell a spin the
           | other day. The crazy thing is you can basically use it as a
           | bash shell, and it gets the job done. My developer experience
           | right now consists of PowerShell, where I do all my regular
           | directory jumping, editing (vim), etc., and a Developer Shell
           | with god awful classic "terminal" which I only use to call
           | conan/cmake/clang-windows.
           | 
           | I have to add the following: MSVC supports clang on windows.
           | And CMake - all within Visual Studio. And it works perfectly,
           | with perfect support for C++17. Badass.
        
             | jhoechtl wrote:
             | What is windows terminal? cmd?
        
             | jolux wrote:
             | Visual Studio has supported Developer PowerShell for a
             | while now, and it's possible to load it into Windows
             | Terminal. It's just a set of arguments. This blog post
             | explains them:
             | https://devblogs.microsoft.com/visualstudio/say-hello-to-
             | the...
        
             | atonse wrote:
             | MS has always been solid with developer tools,
             | documentation, and dev relations.
             | 
             | Even though I prefer administering Linux servers any day
             | over Windows servers, I find myself often missing
             | PowerShell when I use bash. It has some quirks but some of
             | the design decisions are exactly what you'd hope someone
             | would make if they redesigned a command-line shell 40 years
             | later.
             | 
             | I still find it comical that we proudly paste around
             | commands that just wrangle text no differently from what
             | perl programmers did in the 90s, using sed, print, cut,
             | etc, when things like PowerShell moved to piping objects
             | between commands. It just removes a whole class of
             | ambiguity.
        
               | blibble wrote:
               | > MS has always been solid with developer tools,
               | documentation, and dev relations.
               | 
               | in my 25 years of using their tooling and reading their
               | documentation, they've never been more than what just
               | qualifies as borderline acceptable
               | 
               | I booted up VS2019 today for the first time in a while
               | (after waiting 90 minutes for it to install) and it still
               | feels like using a Jetbrains IDE from 15 years ago, and
               | it's still worse than what Borland produced in the 90s
               | 
               | ... and it's even slower than IntelliJ IDEA, which just
               | seems amazing as IDEA is written in Java
        
               | 908B64B197 wrote:
               | > 90s
               | 
               | The paradigm of sending text in and out of pipes is ~20
               | years older than that.
        
             | unnouinceput wrote:
             | Wait until you find out CygWin is a thing for decades and
             | you could've used Linux style under Windows all this time
        
               | nitrogen wrote:
               | There was even a period of time when Cygwin's X server
               | supported GLX and I managed to get some OpenGL software I
               | wrote for Linux to run in Cygwin, but for some reason it
               | was removed or stopped working.
        
               | naikrovek wrote:
               | Not at all the same. Not at all.
        
               | girvo wrote:
               | I mean sure it's not, but back in the late 2000s I did
               | everything under it and it made for a great experience.
               | It's little package manager was handy, everything I
               | needed was there, it worked surprisingly well.
        
         | entropy1111 wrote:
         | >This is really cool. Kudos to Microsoft for really getting
         | open source lately
         | 
         | If they get open source so much it means not open sourcing what
         | really matters is intentional. And quite frankly getting rid of
         | patents, their litigiousness and data collection. But I'm
         | asking too much and I would settle for them to just stop
         | suffocating competitors, innovation and stop with vendor lock
         | in. Same deal for their competitors.
         | 
         | Anything that really matters is just like the same old MS you
         | know. DirectX, Office, Xbox, everything SaaS, IDE, compilers,
         | debuggers, language servers, file formats, UI frameworks, UI
         | patents, GitHub, Windows, Server, you'll find examples in every
         | area. Practices like buying or killing competitors like Vulkan
         | related acquisitions. I get it they are a company and need to
         | maximize profits, so it's cool.
         | 
         | Microsoft has so many quality projects and good people working
         | for them, it's just so frustrating that it's still like this.
         | This will only get worse as the exploitative behavior and
         | business models of their competitors like Google force their
         | hand to do the same.
        
           | DennisP wrote:
           | "By joining the Open Invention Network, Microsoft is offering
           | its entire patent portfolio to all of the open-source patent
           | consortium's members."
           | 
           | https://www.zdnet.com/article/microsoft-open-sources-its-
           | ent...
           | 
           | Apple had "1,996 total patents granted between July 1, 2019
           | and June 1, 2020, more than any other company in Silicon
           | Valley."
           | 
           | https://www.bizjournals.com/sanjose/news/2020/07/27/top-
           | of-t...
        
             | entropy1111 wrote:
             | My recollection from previous OIN threads was that it came
             | with a lot of caveats. I can't comment any further from
             | lack of knowledge about patents and its subtleties. Would
             | love to see an analysis of what really happened in practice
             | since they did that.
        
           | galgalesh wrote:
           | Microsoft joined the open invention network; a defensive
           | patent pool protecting Linux (kernel and distributions). This
           | directly cut into their patent revenue and removed some of
           | their leverage towards Android OEM's. This matters a lot to
           | the android and wider Linux ecosystem.
           | 
           | Moreover, every single Microsoft patent will now be used to
           | fight against any patent claim concerning Linux, related open
           | source software, and a limited set of codecs. [0]
           | 
           | Given the recent inclusion of an exFAT driver in Linux, this
           | hurt MS's business even more.
           | 
           | [0] https://openinventionnetwork.com/linux-system/
        
             | nitrogen wrote:
             | _Moreover, every single Microsoft patent will now be used
             | to fight against any patent claim concerning Linux, related
             | open source software, and a limited set of codecs._
             | 
             | Did Microsoft contribute _all_ of their patents to the OIN?
             | I seem to recall IBM only contributed a specific subset
             | back in the day.
        
         | me551ah wrote:
         | I agree with you.
         | 
         | 1. I run Arch Linux on windows vis WSL which provides pacman as
         | a package manager. Pacman is way better than homebrew.
         | 
         | 2. Docker runs much faster on windows compared to Mac.
         | 
         | 3. My Mac will freeze up at times, while ctrl+alt+del always
         | works on windows.
         | 
         | 4. I am no longer limited to the crappy gpu options on Mac and
         | can actually do gaming on my laptop.
        
           | kyriakos wrote:
           | +1 for docker under Wsl2 is way better than macos
        
           | seertaak wrote:
           | Agreed. BTW if you're looking for a apt/brew like experience
           | on Windows proper, try chocolatey: https://chocolatey.org/
           | 
           | (Obviously there's also the Windows store, which is not bad
           | for GUI programs, but for more developer-type stuff - e.g.
           | installing python - chocolatey is great.)
        
             | me551ah wrote:
             | I love chocolatey and use it quite a bit. But I like Arch
             | Linux's AUR more because it contains way more packages.
             | Though Microsoft also seems to be on their way to make
             | their own
             | 
             | https://devblogs.microsoft.com/commandline/windows-
             | package-m...
        
               | reader_mode wrote:
               | It's a different use case - use Chocolatey to manage
               | native windows installers - it's more like brew casks.
        
             | iimblack wrote:
             | Scoop is a good option too IMO.
        
             | thewrinklyninja wrote:
             | I prefer scoop myself. Everything is isolated to the users
             | profile. Check it out.
             | 
             | https://scoop.sh/
        
             | paulryanrogers wrote:
             | Hasn't WinGet superceded Choco of late?
        
           | _Microft wrote:
           | You might enjoy the backstory to the Windows task manager:
           | 
           | https://news.ycombinator.com/item?id=23304536
        
           | X6S1x6Okd1st wrote:
           | If you find yourself in a Mac again I'd really recommend nix
           | over homebrew
        
           | girvo wrote:
           | For what it's worth, the GPU thing can be solved using an
           | eGPU on Intel macs -- but the thermal throttling and CPU perf
           | basically killed that dead in the water for me; I was running
           | an RX 590 which worked brilliantly, but gaming itself was
           | lacking sadly.
           | 
           | Gave up and built a mini ITX box next to my laptop. Swap
           | DisplayPort, swap one USB-C, done!
        
         | nomel wrote:
         | > throwing up more and more roadblocks and constricting their
         | platform ever more
         | 
         | Do you have any specific examples? From my perspective as an
         | app user, rather than developer, the restrictions they've put
         | in place seem to be beneficial to me. I like sandboxed apps,
         | absolutely love that I can tell an app to bugger off when it
         | tries to access some folder that it has no business reading.
        
         | boogies wrote:
         | What about GNU? It seems like most Windows-[?]using devs use
         | WSL2's Linux VM. What advantages does that have over keeping
         | the MS OS's forced updates, BSODs, etc. in a VM, while keeping
         | a free OS stably settled on bare metal?
         | 
         | I can imagine drivers, but if you stick to only Dell Developer
         | Edition, Lenovo Linux-certified, Purism Librem, System76, or
         | similar (still significantly wider selection than Apple sheep
         | fans seem satisfied with) hardware, things should work more
         | smoothly than with Windows (drivers are built into the kernel
         | and update with the OS).
        
           | tonyedgecombe wrote:
           | _It seems like most Windows users use WSL2's Linux VM._
           | 
           | Most Windows users haven't got a clue what Linux is let alone
           | WSL2.
        
             | boogies wrote:
             | Or that Rust isn't iron oxide. I've edited that line to be
             | clearer, and I'll link definitions for all the other words
             | ~~if someone will show me a pastebin that will hold the
             | 583732 byte file I've just created for shell (xargs & dict)
             | practice for free~~ Edit: https://ghostbin.com/paste/kgwWc.
        
       ___________________________________________________________________
       (page generated 2021-01-21 23:00 UTC)