Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rust for Windows recommends installing a tool (Visual Studio Build Tools) that needs a licence #2867

Closed
jonathanpallant opened this issue Oct 13, 2021 · 17 comments · Fixed by #2989
Labels

Comments

@jonathanpallant
Copy link

What needs to be fixed?

On https://rust-lang.github.io/rustup/installation/windows.html it says

When targeting the MSVC ABI, Rust additionally requires an installation of Visual Studio 2013 (or later) or the Visual C++ Build Tools 2019 so rustc can use its linker. For Visual Studio, make sure to check the "C++ tools" and "Windows 10 SDK" option. No additional software installation is necessary for basic use of the GNU build.

It appears that a Visual Studio (Community, Professional or Enterprise) licence is now required to use the Visual Studio Build Tools, and we should either advise people of the fact or recommend an alternative. See this text on https://visualstudio.microsoft.com/downloads/#remote-tools-for-visual-studio-2019

These Build Tools allow you to build Visual Studio projects from a command-line interface. Supported projects include: ASP.NET, Azure, C++ desktop, ClickOnce, containers, .NET Core, .NET Desktop, Node.js, Office and SharePoint, Python, TypeScript, Unit Tests, UWP, WCF, and Xamarin. Use of this tool requires a valid Visual Studio license.

(my emphasis)

See this issue on VS Code where their C++ plugin was doing the same: microsoft/vscode#95745

Page(s) Affected

https://rust-lang.github.io/rustup/installation/windows.html and anywhere else it talks about the "Visual Studio Build Tools" or "Visual C++ Build Tools".

Suggested Improvement

  1. Tell people they need a Visual Studio licence to use the Visual Studio Build Tools, and/or
  2. Suggest people install an alternative Microsoft Visual C++ compatible C++ compiler

(Duplicated from rust-lang/www.rust-lang.org#1597 as requested).

@kinnison
Copy link
Contributor

kinnison commented Nov 8, 2021

This is certainly a worrying situation for our users to be in. Do you have a recommended alternative toolchain which works with the msvc compliant rust toolchain?

@jonathanpallant
Copy link
Author

No, I do not.

@thejpster
Copy link
Contributor

No change in 2022 either, sadly.

https://twitter.com/therealjpster/status/1457979783925669888

@crd477
Copy link

crd477 commented Apr 15, 2022

Might it be possible to enable Rust to use the native Windows lld-link.exe from the Windows version of LLVM instead of Visual Studio Build Tools?

@ChrisDenton
Copy link
Member

For the linker specifically, that is being tracked here: rust-lang/rust#71520

However, even if/when we switch linker we'd still need some other parts from somewhere:

  • C runtime bits. including startup/shutdown and an assortment of functions such as memcpy, memcmp, etc.
  • Panic handling. I believe this is currently hard coded to use the MSVC C++ _CxxThrowException and __CxxFrameHandler3.
  • The Windows SDK import libraries. These could be replaced by either shipping our own libraries or once raw_dylib is stable.

It is possible that the vcruntime will be made available with an open source license but that's a way off if it happens. If it does then that would make things much simpler.

In the meantime, my "vote" here is for improving the wording/recommendation and perhaps link to the Visual Studio License Directory. If anyone wants to make a PR then I think that would be helpful. I'd be more than happy to help out with reviewing.

@Zerowalker
Copy link

Do i understand this correctly.
Currently if you want to build with Rust for Windows you need a Visual Studio License.
So making anything commercial (or non-commercial but closed source) forces you to buy the license,
and if it's open source and free it still requires a license but you can get away with the Community version?

If so that feels like a huge thing that should be warned about, cause at least i have only focused on the licenses of crates and never thought the toolchain mattered in that regard.

Sorry for just asking a question and not providing any valuable feedback.

@Diggsey
Copy link
Contributor

Diggsey commented May 11, 2022

You do need a Visual Studio license, but the free "Visual Studio Community" license is suitable for commercial use as long as you have no more than 5 users. Only enterprises or organizations with more than 5 users require a paid license:

Enterprise organizations are defined as >250 PCs or > $1 Million US Dollars in annual revenue.

This information is from: https://visualstudio.microsoft.com/vs/compare/

If you have more than 5 users, or meet one of those criteria, then I daresay getting a professional VS license is not going to be a problem.

@Zerowalker
Copy link

@Diggsey
In cases where it's small applications for handling some tasks but the enterprise per say doesn't do developing necessarily it will be a problem. I assume it's not that common though, but it sadly hits me.

Thanks for clarifying, was basically what i was worried about.

I am hoping Rust can become independent from this some day so one doesn't have to think about it and just develop in Rust on whatever platform it supports (a big thanks Rust for pushing the boundaries of what a programming language can do).

@jonathanpallant
Copy link
Author

@Diggsey, that is good to know, thanks. But I believe you still cannot use the MS Visual Studio Build Tools except to build software you are developing with Visual Studio (even if you can get Visual Studio Community free of charge).

MICROSOFT VISUAL STUDIO 2019 REMOTE DEBUGGER, STAND-ALONE PROFILER, INTELLITRACE, SNAPSHOT DEBUGGER, other DEBUGGERS and BUILD TOOLS

You and others in your organization may use these files on your Build Devices solely to compile, build, and verify applications developed by using the software, or run quality or performance tests of those applications as part of the build process.

https://visualstudio.microsoft.com/license-terms/mlt031519/

What constitutes "developed by using [Visual Studio Community]"? I don't know!

Of course this is all theoretical. I don't imagine that Microsoft, Rust Foundation Members, would actually prosecute people for using the 'free' Microsoft Build Tools to develop Rust applications. But I believe the point remains that blindly pointing people to install commercial software with these kinds of terms is problematic, and that at least some words to encourage users to validate the legality of their use of that software would seen prudent. I'm also hopeful that someone from the Core Team or from the Foundation can have a conversation with Microsoft about this issue.

@crd477
Copy link

crd477 commented May 11, 2022

Well stated!

@Diggsey
Copy link
Contributor

Diggsey commented May 11, 2022

@jonathanpallant

I don't disagree with your comment, but

You and others in your organization may use these files on your Build Devices solely to compile, build, and verify applications developed by using the software, or run quality or performance tests of those applications as part of the build process.

"the software" means the build tools themselves, not Visual Studio in general, as stated at the top of the license.

IMO, if you are using the the build tools with Rust in the usual way, then you are using "the software" to compile/build your application, and so the use is explicitly allowed.

(Also those appear to be the 2019 terms)

@ChrisDenton
Copy link
Member

ChrisDenton commented May 11, 2022

I have been looking in to this for awhile and will be attempting to improve Rust's messaging here. Sorry I've been delayed in doing this. Some scattered notes:

  • The Visual Studio installers do link to the license that's being agreed to but it would be well for Rust's documentation to be more upfront about this.
  • The Community edition is free for open source projects and for an individual's closed source projects (as well as some companies). By installing the software, the license is accepted. In fact that's the only way to get a Community license.
  • The Visual Studio Build Tools do require the user to already have a Community, Pro or Enterprise license (the Build Tools license is a "supplementary license"). Therefore, if installing under the Community license, the user will have to have Visual Studio Community installed on at least one of their machines.

@Diggsey
Copy link
Contributor

Diggsey commented May 11, 2022

Therefore, if installing under the Community license, the user will have to have Visual Studio Community installed on at least one of their machines.

This part doesn't follow to me. Installing the software implies agreeing to the license, but it's not the only way to agree to the license... you can just agree. If the build tools are a supplementary license then you agree to both licenses by installing the build tools, there's no need to separately install VS community.

@ChrisDenton
Copy link
Member

Unfortunately it does not work this way. I did ask for clarity on this issue and the response was:

Can users obtain a Community license independently of installing Visual Studio Community? I.e. is there any way to install the Build Tools under a Community license without installing the Visual Studio Community IDE at all?

Not at the moment. Build Tools is a supplemental license to the Visual Studio license. In order to use it, you must have installed Visual Studio on any of your devices.

@Zerowalker
Copy link

That makes things quite peculiar as i would guess it's quite common to use the Build Tools without having Visual Studio.
I mean they themselves give examples like NodeJS and the like, so the license doesn't really make sense.

Feels like it was meant to supplementary from the start, but then things changed but the license was never updated?

@Diggsey
Copy link
Contributor

Diggsey commented May 12, 2022

Yeah that's really bizarre, and would defeat the entire point of having a separate build tools download.

I did ask for clarity on this issue and the response was:

Out of curiousity, who did you ask? And if it was somewhere public, do you have a link to this discussion?

@ChrisDenton
Copy link
Member

It was not a public conversation. Awhile ago I asked Nell Shamrell-Harrington (Microsoft's Rust Foundation board member) who enquired internally. I had meant to do a write up at the time but am I only just getting back to this issue.

I think the build tools were originally intended for build servers, etc.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

7 participants