Masm32 SDK description, downloads and other helpful links
Message to All Guests
NB: Posting URL's See here: Posted URL Change

Main Menu

Visual Studio and MASM licensing

Started by chris, March 09, 2016, 05:29:30 PM

Previous topic - Next topic


My question regards the MICROSOFT VISUAL STUDIO COMMUNITY 2015 license in conjunction with MASM32 SDK license.


My goal is to develop a custom programming language that the end user can use for developing on and generating executables for multiple platforms including non-microsoft platforms.

Development description:
Im using visual studio community 2015 c++ for developing this project.
I intend the final project to be able to generate code for the windows platform. (Windows portable execution format)
To help me learn and understand how the Windows portable execution format works internally I would like to utilize MASM SDK to generate a simple executable file ONLY for reference.
This means that I will be generating an executable file with MASM to use as a template, so that I can progressively overwrite more and more of this file with my own compiler until my compiler can generate the whole file on its own.
This will enable my to test and run the generated executable without having to write the compiler output generator in one go. Which is very hard considering the complexity of windows executable format.
So basically I am using the MASM generated file as a reference to learn and understand how the Windows portable execution format works and how to generate such a file using my own compiler.
This means that MASM will only be used early in development and no generated code from MASM will persist in the project nor the shipped product.

My question is whether this will violate my Visual Studio or MASM SDK license in any way?
Especially considering the following from the MASM SDK license:

the MASM SDK License states the following: What you CANNOT do with the MASM32 SDK: 4. "You cannot use the MASM32 SDK to write software for Non-Microsoft Operating Systems." and
Who can use the MASM32 SDK ? "Government Department and any Company and/or Corporation for their personal/internal use and it can be used to develop and distribute or sell software for the Windows Operating System."
But what if I am not using MASM to write the to be shipped project? As I am only using its generated executable as a reference and temporary template. And will not be include in the final product.

Some extra Information:
I am a single developer working on a single machine.
I intend to sell the final product, for multiple platforms.

Final questions:
Are there any license requirements regarding the custom generation of windows executables?
Are the actions described above in any way violation of the Digital Millenium Copyright Act (DMCA)?
Are there any other legal related things I have to be aware of?

For whomever reads this, thank you for your time and effort.

With kind regards,

Chris Hermanussen


Quote from: chris on March 09, 2016, 05:29:30 PM"You cannot use the MASM32 SDK to write software for Non-Microsoft Operating Systems."

Hi Chris,

Hutch (owner and creator of the Masm32 SDK) will give you an official answer, I suppose, but I can already give you some hints:

- yes, you cannot use the MASM32 SDK to write software for Linux & MacOS; most of the SDK uses the Windows API, so from a purely technical viewpoint, you can't;

- but you can write your own routines, of course, or wrappers around Linux & MacOS API calls;

- \Masm32\bin\ML.exe and LINK.exe are Microsoft products with a license attached, but the JWasm family has a different license and performs the same services.

Welcome to the forum :icon14:


Hello Chris,

Your project sounds great  :t 
Could you,  please ,  describe the main features of your new programming language ?
Do you seriously intend to write compiler \ linker infrastructure from scratch or  ,  maybe , you'll utilize something like LLVM ?


if you build your released versions with non-ms products, you are not in violation, as far as i can see

really, if you write using ms products for testing, you are testing on an ms platform   :P


Let me first say that IM very happy with the fact that I apparently posted on the right forums this time "yeeey".
I already posted on the MSDN, Stackoverflow and the visual studio forums, but they informed me that it was the wrong place to ask such questions.

I am aware of the fact that MASM is for windows only on a technical level. I only intend to use MASM's output for the windows support part.
My intend was only to use MASM output to generate a minimal windows exe that I can use as a template/reference for understanding some things about the PE format.

How the pe format header layout works/looks.
How the windows API mappings look in asm/binary.
And use it as a template ( only in early stages of the windows output development ).

Let me clarify that last part

Lets say I want to ouput a exe for windows.
Parsing, intermediate code generation/ optimization...ect is all done.
The last thing to do is write a windows .exe file.

But here's the problem:
writing the windows exporter for the exe file, which is a complex thing by itself. But certainly if I have to write the windows exporter in one go.
If there is any bug, any bit that should be a 1 but is a 0. windows will not run the exe. Or complain. (or explode and burn down my house :p )

So I would like to let masm generate a simple exe file, something like prompt "hello world" or something.
Then partially overwrite that file with my compiler's output.
This will enable me to atleast test the exe file.
And increse the overwriten part during development.

Eventually all bugs will be ironed out. And I wont need the masm generated exe file anymore, at all.

So basically IM asking if that would be considered a learning act, or violating the terms.

So just to be really clear, the masm exe file will be remove prior to shipping ( probably a long time before that point ).

Maybe IM focusing too much on this aspect, as most people will probably just do it, and no one will ever know, like reading a book and then applying that knowledge, but IM just very

concerned that my work will be in vane.

sure, however not every aspect is set.
I basically wrote the project to be extremely flexible.
This means that a made my custom regularexpression system to easily define what to parse, and a generic way of assigning implementations to those parsed statements.

For the implementation of the to be language created with this system I am still experimenting.
But it will have a heavy focus on readability and ease of use.
Its purpos will most likely be for game development.

Yes it is my intent to write it from scratch. IM kind of a control freak I guess, as you may have been able to read from the part above.
I just want to have full control.

I agree, but even knowing that when implementing the ouput for non-microsoft platforms, for example linux, and then testing and writing the executable generator for linux on a linux machine
using my base frameworke written in visual studio on windows concerns me...

I really hope this makes any sense, as I find it very hard to explain my concerns about this matter.

Again, thanks for all the time and effort.



hello, this is my first post and glad to be finally in the forums..

i was thinking about the copyright too. since all microsoft software are under the microsoft eula (with exception of some and i lost track since microsoft was and is still inclining to be close with linux), is it high time that the forums support an assembler that is hosted by the forums, like UAsm, ObjAsm, PoAsm, etc?

coz since ml64 is bundled with Visual Studio, if you have to use the ml64 on say VS Enterprise or Professional to its full freedom, it is assumed that you have to pay for your copy of that VS. even 32 bit of microsoft assemblers are also still used in current VS versions and abstraction can easily make it regress to affect the older 32 bit assembler versions too, which is yet again, under the Microsoft EULA.

but i'm not for totally abandoning the current flagship SDK of this forums but you can use it permissively or for hobbyist purposes. but idk, i still have to read the justifications made by the forum founder on how he wrote his version for the EULA of his MASM32 SDK distribution.

that's pretty much it. something to think about.

have a nice day..


Welcome to the forum, alCoPaUL.   :thumbsup:
btw the Microsoft Build Tools are also available as a separate download without needing visual xxx SDK...

Google for Microsoft Visual C++ Build Tools.


Hi alCoPaUL,

Zedd is right that MASM is free, but the VS download is huge, and ml.exe sucks.

For 32-bit code, UAsm64 is my choice (AsmC is good, too, but its developer often had strange views and eventually left the forum). It is my choice because a) in active development, b) fully compatible, c) a factor 3-4 faster than MASM.

For 64-bit code, it gets complicated: MASM for 64-bit assembly is crippleware (*)  search the forum), therefore Hutch had to develop the Masm64 SDK with macros for high level elements such as .Repeat ... .Until and .if .else .endif:

.if eax{ecx
.if ecx{=123

Sooner or later we will have to deal with this. UAsm is not crippleware, but the ugly syntax won't work with it. Plus, MASM is so slow... not a problem for Hello World proggies, but in the medium term, when you go into the thousand lines zone, a slow assembler becomes a real nuisance.

Welcome to the forum :thup:

P.S.: Tell us more about you - what made you decide to learn assembly?

Quote from: jj2007 on September 18, 2016, 10:02:01 AM
Quote from: hutch-- on September 18, 2016, 08:52:21 AMit would still require some of Vasily's macros

It would require disabling the .if, invoke etc macros with e.g. IFIDNI @Assembler, <ML> then .if macro ...

Perhaps like this:
IFIDNI @Assembler, <ML>
  include   ; invoke, if else endif, repeat ... until, while ... wend, switch .. case .. endsw

Macro compatibility per se is no longer a problem. All MasmBasic macros work with all our assemblers. Occasionally, I had to tweak them a little bit to make them work with ML and the Watcom family, but there is not a single one that needs conditional assembly.


hey zedd and jj, thanks for the welcome..

i noticed that when you install the sdk, say visual studio 2010, it needs visual studio 2010 proper versions to be installed (if i can recall correctly, express versions cannot host the sdk). idk if future versions of the sdk allows you to install it without the corresponding VS or even has the ml64.exe, ml.exe etc. in it.

yeah, jj. say like if this forum decides to highlight UAsm as the featured assembler, all the .incs and features or complementary files etc. in MASM32 SDK by hutch could be translated or adapted to UAsm. UAsm can even modded to assemble executables for different OS's and Architectures, since MASM just targets 1 os and 1 architecture (x86++).

and of course, as this forum is built on MASM32 SDK, it will still be maintained and will still be respected and further improved..

just a thought.

again, thanks for the welcome, zedd and jj.

and yes, jj, i just learned assembly lately to do some personal projects. but not too much hardcore. i am also active in the NASM forum as i was using NASM hardcore with the project. i was doing some visual basic 6 and few .net languages in 2002.

the project is in the signature.. :D



Quote from: alCoPaUL on July 01, 2023, 02:03:48 AMi noticed that when you install the sdk, say visual studio 2010, it needs visual studio 2010 proper versions to be installed

The Masm32 SDK does not need Visual Studio at all - see Tips, Tricks and Traps.

Quoteif this forum decides to highlight UAsm as the featured assembler, all the .incs and features or complementary files etc. in MASM32 SDK by hutch could be translated or adapted to UAsm.

Not necessary for the Masm32 SDK: all sources assemble just fine with UAsm, it's practically 100% compatible.

The only problem here is the Masm64 SDK. There are several approaches, due to the fact that ML64 is seriously crippled: Microsoft dropped all the HLL elements, i.e. .if ... .else ... .endif, .Repeat ... .Until and the like. Therefore some of us dropped Microsoft, while Hutch developed macros to overcome this brilliant Micros*t decision. Of course, the different approaches are not compatible with each other. Again, this is Masm64, not Masm32.


jj, what i meant was the sdks hosted by microsoft for different versions of VS. :D

i must correct myself with the visual studio 2010 coz you can install the Microsoft Windows SDK for Windows 7 and .NET Framework 4 and then install Visual Studio 2010 and vice versa. there are some versions (i think for less than visual studio 2010), that needs the proper VS versions (Professional, Enterprise) to be installed to be able to update the compilers via the appropriate sdks (like you cannot update the compilers of visual c++ 2005 express via installing the appropriate SDK for vs 2005).

and for the .exe's in later sdk, i remember that i decided to download the window10 sdk and install it and didn't find the appropriate assemblers (what are there are the libs, the other .exes and some files)

hope to clear things out.


The point is you don't need VS (except for grabbing a recent ML.exe - but UAsm is better), and you don't need the Microsoft Windows SDK. With Masm32 you can do whatever you want, there are around 20,000 WinApi functions, and all of them are either prototyped in the Masm32 include files (most of them), or you can access them with LoadLibrary + GetProcAddress.

Re .NET I'm not sure, nobody has ever used it here, but if it's COM, no problem.