Could you please explain to me why ml thinks that I'm trying to reopen the segments instead of just opening them, or, if it's normal, when they were opened originally?
AFAICS, noone really answered your question - instead, you had to swallow a lot of propaganda about what's "modern".
Your segment definitions "reopened" the segments because the
.model directive at the top of your program defines - under the hood - two segments: _TEXT and _DATA with certain attributes, and those atributes cannot be changed later.
What attributes are actually used depends on the .model that is defined and also to some degree on the cpu directive (.386, .486, .586,...). If you feed masm with the -Fl option, it will generate a listing, where you can see what segment attributes masm has actually used.