On export Glyphs sets a Nonspacing mark’s width to zero., but I could also set it to zero myself, right? So I would expect to get the same result either way. What I found is that letting Glyphs zero the width exports the Glyph with a different left sidebearing. In 99.99% of cases this isn’t an issue, but I had a situation where I needed to add width later using the dist feature and because of the value of the left sidebearing I got unexpected results. I did a simple test to see and what I get is this:
Nonspacing mark with 600 width, let Glyphs zero it on export. Result: left sidebearing = -406
Zero it myself before export. Result: left sidebearing = 194
For marks in LTR scripts, the LSB is moved to the right on top of the RSB. That way, if the mark is typed in an app that does not support mark positioning, the mark would at least sit above the preceding glyph.
Note if letting Glyphs do this automatically, in some cases the right sidebearing should be put onto the left sidebearing. Burmese kinzi and all its associated mark ligatures need to sit above the following base, so the glyph should be positioned to the right of x=0.
As all marks are, at least in the other scripts I work on.
IMHO the marks should sit in the right place even when mark positioning is not activated. Display of Burmese text has enough problems without having kinzi end up on the wrong syllable. (In a Zawgyi-encoded font, there’s no mark positioning, though I’m not actually sure what order people type kinzi in this encoding.)
At any rate, I always need to preview all marks in situ while designing other glyphs (in Burmese, notably when designing the wraparound medial Ra, which needs to clip precisely around clusters of consonant + mark, but there are other reasons in the other scripts), which means I always design them with zero width, but I believe other designers do things differently.