Volume without context is meaningless.

If you assume, in the way of solid object thinking, that everything “inside” a closed boundary defines your volume, you will always get positive volume values. To make thing’s useful, we should only use the finite partition of space for calculation. But is this always “inside”?

What about voids? Considering a solid block of steel. This block has a hollowed out core. Now you can define the positive volume of the whole block. You can determine the positive volume of the air inside the block. But with respect to the volume of steel, the air inside the block does not have positive volume. In fact, you need to subtract it from the volume enclosed by the outer boundary of the block.

With respect to the steel, the enclosed air is “outside”. So the volume of the steel with respect to the inner surface would be infinite and you would need to intersect this infinite space with the outermost boundary to get a finite result. Our you can just use the finite volume that you find on the “outside” of the inner boundary. But what about it’s volume? Since this volume now is “outside” and we used positive values for enclosed spaces “inside”, the value must be negative.

And this makes perfect sense, because the volume of the inner boundary (negative) added to the volume of the outer boundary gives you the volume of what’s between those boundaries.

You could define a separate set of “void BReps” that would always calculate positive volumes but will get subtracted from the volume afterwards. Or you could just use the Surface normal direction to determine what counts as “outside”. The latter does require fewer separate cases to keep track of and integrates nicely into the overall math involved… problem is that you may be able to construct faces that overlap and intersect themselves in a way that generates outside surfaces inside your boundary. If the inward facing surfaces get bigger you will finally end up calculating negative volumes.

Rhino will try to make BReps have positive volume by orienting all faces so they face outside. So if you expect a solid closed boundary and get a negative volume, you did something very wrong constructing this BRep.