Why game objects have necessarily a transform component?

It happens that sometimes a monobehaviour does not need any transform. So why is it not possible to remove this component? It would also be possible to create "groups" of game objects (in the scene hierarchy) under another game object which would not have a transform component. This would allow quicker access to gameobjects by the user as the scene hierarchy would be cleaner.


Edit (To Cyclops answer):

Ok Cyclops, actually I wanted to answer to SpikeX and Jashan, editing my original question is not very understanble IMHO. And i can't answer to two persons at the same time in a comment (also the number of characters is limited in a comment!? oO )

Anyway, going back to my issue, if I have a script on a gameobject that want to reach its root gameobject for any reason (like access to a particular monobehaviour on the root), I would use transform.root. However, if this root gameobject is grouped under an empty gameobject. Transform.root would not work any as it would return the group gameobject. To prevent this issue, I originally wanted to remove the transform component of the gameobject used to build the group.

Actually, the reason why this isn't possible is because GameObjects have no hierarchy in themselves. The hierarchy is provided through the Transform components. See also Transform.parent, Transform.childCount and Transform.IsChildOf(...).

The documentation of the Transform class reveals that you also can easily iterate over all the children of a Transform (i.e. the child game objects): Transform

C#:

foreach (Transform child in transform) {
    child.position += Vector3.up * 10.0;
}

UnityScript:

for (var child : Transform in transform) {
    child.position += Vector3.up * 10.0;
}

So, while you really don't need the spatial information in Transform for groups of game objects that have and need no spatial reference, you need the transform to be able to put the GameObjects into the hierarchy of the scene. Without them, this simply wouldn't work.

That's why in Unity, every GameObject always has a Transform component attached to it.

Unity's system is designed such that every object in the world must have a position, rotation and scale, even if it isn't visible. This is so that, for example, if you wanted to code a spawnpoint system, you could use an empty game object, but still retrieve its position.

The transform component is "hard-wired" into every game object, and is required to be there. This has absolutely no adverse effect on game performance. You can't remove them, and they won't interfere with your game's performance, so don't worry about them.

Ok thank you for your replies spikeX and Jashan.

I understand that unity encapsulated the hierarchy concept inside the Transform component. Actually, we would like to group gameobjects for visual convenience in the scene hierarchy interface (and secondly, speed up gameobject finding operations). The problem is when we do that, if a gameobject monobehaviour inside a group access to the transform.root it will get the empty gameobject used to group other gameobjects because it has a transform and that's not what we want.

So, actually it is not gameobject that we need, just a "group object" to better organize the scene view and quickly access to game objects. It is the same concept as namespaces in C++ or C#... And by removing the transform of a gameobject we wanted to simulate this feature.