Here is an arc-length reparametrization in terms of a function `tfn` that maps the arclength to the parameter `t`.  It's important to use `AspectRatio -> Automatic` to get the spacing even.

There are two truncation-error issues with parametrizing the full length of the curve.  One is that the stopping point is found by stepping past the end of the curve.  `BSplineFunction` does not extrapolate, so I extended its derivative in `dg`.The other is actually getting to the end of the curve.  I dealt with it by over estimating the arclength and using `WhenEvent` to stop the integration.  The `NIntegrate` used to get the total arclength is fast, so it is not very wasteful in this case.  If `NIntegate` were slower, one could overestimate the arclength in other ways, e.g. from `list2`.

The domain of `tfn` runs from 0 to the arclength.  To get even spacing, I rescaled an even division of the unit interval to the domain of `tfn`.

    ClearAll[s, t];
    dg[t_?NumericQ] := If[t - 1. <= 0, g'[t], g'[1]];
    tfn = NDSolveValue[{t'[s] == 1/Norm[dg[t[s]]], t[0] == 0, 
       WhenEvent[t[s] == 1, "StopIntegration"]},
      t, {s, 0, 1 + NIntegrate[Norm[g'[t]], {t, 0, 1}]}];
    
    ListPlot[g /@ tfn[Rescale[Range[0, 1, 1/20], {0, 1}, First@tfn["Domain"]]],
     AspectRatio -> Automatic]

![Mathematica graphics](https://i.sstatic.net/hgfQm.png)

If you want a different aspect ratio, such as the default `1/GoldenRatio`, then we have to adjust how the arclength is computed by scaling the derivative vector, e.g., by `{1, 1/GoldenRatio}`.

    ClearAll[s, t];
    dg2[t_?NumericQ] :=  If[t - 1. <= 0, g'[t], g'[1]] {1, 1/GoldenRatio};
    tfn2 = NDSolveValue[{t'[s] == 1/Norm[dg2[t[s]]], t[0] == 0, 
       WhenEvent[t[s] == 1, "StopIntegration"]},
      t, {s, 0, 1 + NIntegrate[Norm[dg2[t]], {t, 0, 1}]}]
    
    ListPlot[g /@ tfn2[Rescale[Range[0, 1, 1/20], {0, 1}, First@tfn2["Domain"]]]]

![Mathematica graphics](https://i.sstatic.net/nCL5k.png)