[HN Gopher] Windows Terminal Source Code
       ___________________________________________________________________
        
       Windows Terminal Source Code
        
       Author : anderspitman
       Score  : 79 points
       Date   : 2022-05-11 17:53 UTC (5 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | nyolfen wrote:
       | winterm looks very nice but it often screws up character
       | alignment if you resize the window. it happens so frequently that
       | i gave it up, because at least once a day i could no longer tell
       | what i was typing or trying to copy. i'm a happy customer with
       | alacritty windows builds, but i wish it had tabs.
        
         | dpool wrote:
         | You're probably already aware of this, but just in case you're
         | not (or someone else reads this that's curious), running tmux
         | (src: https://github.com/tmux/tmux/wiki) inside alacritty will
         | give you tab functionality along with the ability to
         | horizontally/vertically split and a host of other fun features.
        
           | nyolfen wrote:
           | yes, i'm still a tab clicker though :)
        
       | Lammy wrote:
       | Here are all the ways it spies on you:
       | 
       | https://github.com/microsoft/terminal/search?q=Telemetry%3A%...
       | 
       | https://github.com/microsoft/terminal/blob/main/src/host/tel...
        
         | whywhywhywhy wrote:
         | ok, what do those do?
        
           | foolfoolz wrote:
           | tell microsoft when you're using features. presumably because
           | they have a culture of metrics and every feature is required
           | to have data on its usage patterns
        
             | nojito wrote:
             | It's just used to drive improvement efforts rather than
             | focusing on features + bugs no one cares about/uses.
        
           | rolph wrote:
           | i read the code , they take usage data points build a logfile
           | and wait for a request to retrive.
        
           | Lammy wrote:
           | There are some pretty detailed comments on many of them if
           | you click through to their call sites, and more can be
           | inferred from the file names of the callers.
           | 
           | Let's take a look at `windowio.cpp` for example. This most-
           | generic event fires every time you type any input character
           | on the keyboard: https://github.com/microsoft/terminal/blob/5
           | 7c3953aca49f68ac...
           | 
           | It also has more-specific events for several different ways
           | of selecting, copying, and pasting text: https://github.com/m
           | icrosoft/terminal/blob/57c3953aca49f68ac...
           | 
           | In `find.cpp` we can see it log every time you find the next
           | result in the "Find" dialog, as well as when the dialog is
           | closed: https://github.com/microsoft/terminal/blob/57c3953aca
           | 49f68ac...
           | 
           | In `windowproc.cpp` we can see it log every time you resize a
           | console window, close a console window, bring up the context
           | (right-click) menu, drag-and-drop on to a console window:
           | 
           | - https://github.com/microsoft/terminal/blob/57c3953aca49f68a
           | c...
           | 
           | - https://github.com/microsoft/terminal/blob/57c3953aca49f68a
           | c...
           | 
           | - https://github.com/microsoft/terminal/blob/57c3953aca49f68a
           | c...
           | 
           | - https://github.com/microsoft/terminal/blob/57c3953aca49f68a
           | c...
           | 
           | This even extends outside the "Terminal" application wrapper
           | itself, with a generic "LogApiCall" used to track e.g. any
           | time any other process spawns a console window:
           | 
           | - https://github.com/microsoft/terminal/blob/57c3953aca49f68a
           | c...
           | 
           | - https://github.com/microsoft/terminal/blob/57c3953aca49f68a
           | c...
           | 
           | Click around a few of the search results and see what else
           | you can find!
        
             | Genbox wrote:
             | What you are stating is incorrect.
             | 
             | Each of the calls you link to sets a boolean here: https://
             | github.com/microsoft/terminal/blob/57c3953aca49f68ac...
             | 
             | It does not transmit what you copy, search for or when you
             | clicked/resized/closed the window. It simply stores a
             | true/false value saying "feature X was used". In some
             | cases, like with find/replace, it also stores the average
             | length of things you searched for. That is a common way for
             | developers to get an idea if performance characteristics
             | due to the longest common substring problem[1]
             | 
             | You are trying to spread misinformation here to make
             | Microsoft look like a bad guy. There is nothing sinister
             | going on here, it is just ordinary metric collection.
             | 
             | But don't take my word for it. Take for example the "we can
             | see it log every time you resize a console window"
             | statement. In the link it calls SetWindowSizeChanged()[2]
             | which again calls SetUserInteractive()[3] and it just sets
             | a boolean to true.
             | 
             | So there is no "log every time it resize a console window".
             | It simply sets a variable to true, which presumably the
             | Windows Terminal dev team use to see how many users use the
             | console with interactive sessions.
             | 
             | [1] https://en.wikipedia.org/wiki/Longest_common_substring_
             | probl...
             | 
             | [2] https://github.com/microsoft/terminal/blob/57c3953aca49
             | f68ac...
             | 
             | [3] https://github.com/microsoft/terminal/blob/57c3953aca49
             | f68ac...
        
             | eecc wrote:
             | I'm frankly shocked for the level of triviality of this
             | code: and endless series of if/else while I've been
             | stressing about reactive, typeclasses and whatnot for the
             | past 5 years. And I frankly prefer the latter
        
             | mftb wrote:
             | Thanks for doing this. Looking over some of the actual call
             | sites and there commentary was interesting.
             | 
             | For all the folks who say it's all totally innocuous (or
             | even beneficial). Even if it is, I can tell you, I have no
             | interest in my computer doing this while I'm using it.
        
               | donmcronald wrote:
               | I've always wondered what the performance impact is.
               | Windows 10 feels so slow compared to Windows 7 and
               | earlier that I'm constantly wondering how much of my life
               | is being allocated to telemetry.
        
               | mftb wrote:
               | Not sure but it's a reasonable question. I'm willing to
               | give MS the benefit of the doubt and guess that they have
               | generally implemented it in as light a way as possible,
               | but that said sometimes it probably causes dire
               | performance problems to outright breakage. For me it's
               | largely academic at this point, but it's another reason
               | to be happy I moved my main workstation off Windows.
        
               | sirsinsalot wrote:
               | You're willing to give MS the benefit of the doubt? I
               | remember the bad old days and they no longer have this
               | luxury from me.
        
               | mftb wrote:
               | Understood and when I was being forced to deal with it
               | more often, I was not feeling so magnanimous either.
        
             | assttoasstmgr wrote:
             | Say what you will about Microsoft but they put a
             | substantially more amount of comments in their code, as
             | compared to say, GNOME Terminal.
        
         | ossusermivami wrote:
         | as a software dev you know that soft anonymous telemetry of how
         | a user use what you do is very valuable to make decision on how
         | to make things....
         | 
         | I wish there was way everywhere to collect with privacy and
         | being accepted by user as not something we want to spie people
         | on... but as always there is (a lot ) of abuse in this area so
         | this may never going to happen
        
         | voidfunc wrote:
         | The horror!
        
         | kingcharles wrote:
         | Compile it without those functions?
        
         | [deleted]
        
         | Melatonic wrote:
         | While I am not a huge fan of the way Windows is going in
         | general for the most part you can turn off most of the tracking
         | that is currently enabled. Unfortunately I do not have direct
         | experience with the telemetry tracking for windows terminal.
        
         | stockerta wrote:
        
           | Lammy wrote:
           | It doesn't have to be a full keylogger to be a very bad
           | thing:
           | https://kieranhealy.org/blog/archives/2013/06/09/using-
           | metad...
        
           | skywal_l wrote:
           | The overton window is moving fast...
           | 
           | You should not need telemetry on a terminal. It's a fscksing
           | terminal, a window in which you display characters, why would
           | anyone need telemetry?
           | 
           | I am sure it is not intended as a keylogger but could become
           | one very quickly if they fscks it up. It's microsoft we are
           | talking about...
        
         | Guillaume86 wrote:
         | Just glancing through them it looks like perfectly reasonable
         | telemetry collection, not sure why you call that spying.
        
           | Lammy wrote:
           | spy (/spaI/) v.,
           | 
           | 1 : [intransitive] to collect secret information about
           | another country, organization or person
        
             | meowkit wrote:
             | Is your runtime data "secret"?
             | 
             | I think some people will have a hard time with this
             | concept, but the idea of data being "private" or "secret",
             | _by default_ , is disappearing. And it won't be coming back
             | if the world continues to digitize.
             | 
             | If you want those attributes for your data, you'll have to
             | take measures. That means reading user agreements,
             | verifying open source, using encryption intentionally.
             | 
             | Vacuuming up data is not spying. Especially if you
             | essentially agree to it when you accept the Windows terms
             | of service (ethical issues of this aside).
        
               | Lammy wrote:
               | > Especially if you essentially agree to it when you
               | accept the Windows terms of service (ethical issues of
               | this aside)
               | 
               | "But the plans were on display..."
               | 
               | "On display? I eventually had to go down to the cellar to
               | find them."
               | 
               | "That's the display department."
               | 
               | "With a flashlight."
               | 
               | "Ah, well, the lights had probably gone."
               | 
               | "So had the stairs."
               | 
               | "But look, you found the notice, didn't you?"
               | 
               | "Yes," said Arthur, "yes I did. It was on display in the
               | bottom of a locked filing cabinet stuck in a disused
               | lavatory with a sign on the door saying 'Beware of the
               | Leopard."
        
             | DoctorOW wrote:
             | "secret information" is quite a bit of a stretch...
        
               | baisq wrote:
               | What you do with your software in the privacy of your
               | home seems like it should be "secret"
        
               | Genbox wrote:
               | That is not how telemetry works. It is not spying or a
               | privacy issue. Categorizing it as such only dilute the
               | meaning of both terms so the real issues won't be taken
               | serious.
               | 
               | If you feel like a bunch of developers getting info about
               | how many times the world clicks on a button hurts you
               | personally, then don't install it. Calling it a privacy
               | issue it taking it too far.
        
               | imwillofficial wrote:
               | It is absolutely both a spying and privacy issue. What I
               | decide is private, or what information constitutes spying
               | is arbitrary.
               | 
               | I love windows terminal, but it should collect nothing by
               | default. Another subjective opinion.
        
           | cryptonector wrote:
           | Terminals should not be sending telemetry.
           | 
           | Imagine if every .exe and every .dll did that! That's not OK!
        
           | babypuncher wrote:
           | We have a habit of diluting words to the point where they are
           | meaningless, and I think it does more to hurt important
           | causes than support them. By labeling all forms of telemetry
           | as "spying", we just make it so people are less likely to
           | take actual claims of spying seriously.
        
             | disruptiveink wrote:
             | That is what it once meant. "Spyware" was the term used for
             | any process that called home regarding any information
             | about you, your computer or your usage in the background.
             | Calling home for anything other than "Check for updates"
             | menu items or other actions where calling home was the
             | explicit action the user wanted would get your name
             | tarnished in the media and added to the signature list of
             | software built for the sole purpose of finding and
             | forcefully removing software like that.
             | 
             | Practically any Android app these days would be considered
             | "spyware" if we were still applying the "spyware"
             | definition of the early 2000s. And we would be better off
             | if we had never stopped.
        
           | tjoff wrote:
           | Just glancing through them it looks like it wouldn't produce
           | much meaningful data, begs the question - why have it in the
           | first place? Since everyone involved must have known the
           | reactions to it.
        
       | Genbox wrote:
       | Note: This is not news of any kind. Windows Terminal has been
       | open source since its first release 3 years ago.
        
       | Bostonian wrote:
       | Just wondering -- why would Microsoft release the source code for
       | this component of Windows?
        
         | aneutron wrote:
         | There's an excellent blog post by the product manager I believe
         | that explains the history of the CMD command, how terminal
         | emulation works in Windows, and the work they were doing.
         | 
         | The way I understand this project is essentially "an interface"
         | to the new ConPTY they developed (which IIRC is closed source,
         | naturally).
         | 
         | That doesn't make it any lesser. I've used it since a build was
         | available, 4 years ago or something. I love it.
         | 
         | EDIT: Found it !
         | https://devblogs.microsoft.com/commandline/windows-command-l...
        
           | DHowett wrote:
           | So, one of the cool things about this repository (Hi! I'm the
           | engineering lead for the Terminal/Console/... team. I'm
           | biased!) is that it _also_ contains the source for ConPTY and
           | the rest of the Windows console host[1]. Every change made
           | here flows back into Windows, and vice-versa.
           | 
           | In this repo, you can find some of our terrible secrets and
           | workarounds and debugging hooks and _perhaps_ even some
           | explanation for why things work the way they do. Or don 't
           | work the way they should.
           | 
           | If you're looking for a good[2] way to spend a few minutes,
           | search for "LOAD BEARING" :)
           | 
           | [1]: If you build the "Host.EXE" project and copy the
           | resulting OpenConsole.exe over %WINDIR%\System32\conhost.exe,
           | it'll work just fine and you'll pick up a bunch of the
           | console changes we've made in the past few years.
           | 
           | [2] Goodness not guaranteed, void where prohibited, etc.
           | 
           | EDIT: Oh, kaelinl mentioned this in a sibling comment to
           | yours. Sorry about that! I've also reworded parts of the main
           | comment body to flow better.
        
         | runevault wrote:
         | Not sure I'd really call this a component of the OS. It is a
         | new app that works with various shells (including cmd,
         | powershell, and WSL) to create a better experience using them
         | including tabbed view so you can have multiple terminals from a
         | single window.
        
           | easton wrote:
           | The core console emulator for Windows is a part of this too:
           | https://github.com/microsoft/terminal/tree/main/src/host
        
         | kaelinl wrote:
         | There are multiple projects in this repo. Windows Terminal,
         | which the other commenters focus on, is a relatively new
         | standalone app and not (yet?) bundled with the OS. They opted
         | to open source it from the start, more or less. The other part
         | is conhost, which is the classical terminal that has existed in
         | Windows for decades. Some of the layout and rendering logic was
         | pulled out of conhost to be shared with Terminal, and the two
         | projects are maintained by the same team, so they open-sourced
         | both. As I understand it, they then ship conhost and its shared
         | components in Windows releases.
        
           | tmottabr wrote:
           | AFAIK it is bundled since Windows 11.
        
         | Melatonic wrote:
         | Windows in general is moving more in this direction and trying
         | to integrate more with linux
        
         | kingcharles wrote:
         | Probably the same reason they've opened sourced some other
         | components lately: community feedback and updates.
         | 
         | There are a bunch of bugs in Windows core that I can't even get
         | anyone to look at (and I'm an MVP). With these little bits
         | they've opened sourced you can actively participate in helping
         | the team fix the bugs, and add features as needed.
         | 
         | I know the team on Terminal had a whole muddle of problems to
         | do with rendering recently that probably still needs some
         | outside input. Even Microsoft's developers can't and don't know
         | all the best ways to carry out tasks with their own APIs -
         | there is just too much to learn.
        
         | uuyi wrote:
         | I think they are load testing their github acquisition...
        
         | oaiey wrote:
         | There is no trade secret in it and users who use it can often
         | also help improving it.
         | 
         | There are only positive outcomes here
        
         | rbanffy wrote:
         | Why not? It's not something that gives Windows a competitive
         | edge and it's very unlikely it could be ported to another
         | platform.
        
         | tiernano wrote:
         | the code has been open since the beginning of the project,
         | IIRC... back when it was announced first, to get it to build,
         | you needed to build it locally...
        
       | tambourine_man wrote:
       | Apple should follow MS's example and open source its Terminal.app
       | 
       | It's a decent terminal emulator, but could use several
       | enhancements and the community could help.
       | 
       | For some reason I haven't changed to iTerm yet, even though it's
       | been objectively better in every way for years. Even the minor
       | gripe I had with font rendering is fixed.
       | 
       | There's something about using default apps as much as possible
       | that appeals to me. But Terminal.app is lagging compared to the
       | competition.
        
         | ossusermivami wrote:
         | when i am using macOS I use kitty as on my (primary) Linux
         | laptop, and it's works beautifully there,
         | 
         | (iterm2 is great too)
        
         | disruptiveink wrote:
         | I was a Terminal.app user since Tiger, only recently had to
         | switch to iTerm 2 as since Big Sur it forces anti-aliasing on
         | non-HiDPI displays, even when turned off in the settings (I
         | like non anti-aliased Monaco 10pt). It looks like a bug, but
         | hasn't been fixed since.
        
         | Maursault wrote:
         | > Apple should follow MS's example and open source its
         | Terminal.app
         | 
         | This is bellyaching about nothing. Instead, Microsoft should
         | follow Apple's example and open source _the operating system_.
         | The only part of macOS that is not open source is the GUI, i.e.
         | Quartz Compositor, and the gui applications. Microsoft,
         | meanwhile, is an incredible slouch when it comes to open
         | source, only very recently changing their hostile  "embrace,
         | extend, extinguish" stance towards OSS.
        
           | melony wrote:
           | Mac without the userland is mostly useless. At that point you
           | might as well switch fully to FreeBSD.
        
             | Maursault wrote:
             | This is a straw man, and also not entirely accurate. Darwin
             | is BSD, and in theory just as useful as BSD, or FreeBSD,
             | NetBSD, and useful to developers, and to anyone that can
             | figure out how to install it and use it. [1] Meanwhile,
             | Windows without hardware less than 2 years old is
             | absolutely worthless. Thus, Linux.
             | 
             | [1] http://www.puredarwin.org/
        
         | rbanffy wrote:
         | > It's a decent terminal emulator, but could use several
         | enhancements and the community could help.
         | 
         | It's the only modern terminal that passes the VT torture test.
         | It supports double width and double height characters (great
         | for terminal error messages).
         | 
         | It doesn't support overline (which is awesome for status lines
         | at the bottom of the screen) and requires font support for line
         | drawing and block graphics (Unicode 13 introduced 2x3 blocks
         | and the next one will introduce 2x4s).
         | 
         | > There's something about using default apps as much as
         | possible that appeals to me
         | 
         | For me it's one less thing to distract my distraction-prone
         | brain.
        
           | Komodai wrote:
           | VT torture test?
        
             | DHowett wrote:
             | I think rbanffy is referring to vttest[1], but I'm not
             | certain.
             | 
             | [1]: https://www.invisible-island.net/vttest/
             | 
             | EDIT to add: vttest is maintained by the current maintainer
             | of xterm. It's the "torturiest" VT test I know of.
        
       | wayne wrote:
       | Had a really fun trailer/video when it launched:
       | https://www.youtube.com/watch?v=8gw0rXPMMPE
        
       | dundarious wrote:
       | Worth watching Casey Muratori's series of videos on terminals,
       | and how to implement them, where he often makes specific
       | comparison to Windows Terminal. He has some specific criticisms
       | that are easy to disagree with, but the vast majority are well
       | warranted. His broader series of videos on the topic are even
       | worthwhile from a purely "software engineering education"
       | standpoint.
       | 
       | https://youtu.be/hxM8QmyZXtg
       | 
       | I feel a bit bad about posting comments about it relatively
       | frequently on HN, but it's just so very very good, and snark
       | aside, his perspective is extremely valuable.
        
       | rolph wrote:
       | this caught my eye:
       | 
       | >>Installing and running Windows Terminal
       | Note: Windows Terminal requires Windows 10 2004 (build 19041) or
       | later
       | 
       | Microsoft Store [Recommended]
       | 
       | Install the Windows Terminal from the Microsoft Store. This
       | allows you to always be on the latest version when we release new
       | builds with automatic upgrades.
       | 
       | This is our preferred method.
       | 
       | Other install methods
       | 
       | Via GitHub
       | 
       | For users who are unable to install Windows Terminal from the
       | Microsoft Store, released builds can be manually downloaded from
       | this repository's Releases page.
       | 
       | Download the Microsoft.WindowsTerminal_<versionNumber>.msixbundle
       | file from the Assets section. To install the app, you can simply
       | double-click on the .msixbundle file, and the app installer
       | should automatically run. If that fails for any reason, you can
       | try the following command at a PowerShell prompt:<<
        
         | pooper wrote:
         | I am glad to see scoop called out in the list of installation
         | methods. I use scoop and like the idea behind scoop.
         | Applications should install in my user_profile when possible
         | and should only require sudo when it isn't possible.
         | 
         | All new application in $current_year should install as
         | $current_user_scope by default. I hate how applications
         | (looking at you, Google Chrome) try to install a scheduled task
         | to keep itself updated. All of this should be up to the package
         | manager. If I want to update the client application, I will do
         | so myself.
        
         | legulere wrote:
         | You can also just install it with winget
        
           | easton wrote:
           | And the winget version updates automatically with the
           | Microsoft Store (not that that matters much if you are into
           | using scoop/choco, since you know to just scoop upgrade)
        
       ___________________________________________________________________
       (page generated 2022-05-11 23:00 UTC)