Quoted from a previous ticket, #4409
The key problem is that a master can’t reliably distinguish between two versions of the same native type that are used in different environments (or between an environment which uses a native type and an environment which doesn’t). This is due to the fact that native types are defined using ruby code, which the master loads into Ruby classes via “require”. Since there can only be one Ruby class with a given name at a time, this prevents the master from being able to have two different versions of the same type in two different environments. This makes life difficult for people who are trying to use a “test” environment to try out a new version of a native type on a limited set of nodes before deploying it to all nodes.
A secondary problem is that the location where the master looks for the definition of native types is not the same as the location of plug-in files that the master distributes to agents. This leads to confusion even for people who are not using a “test” environment, because it means that they have to put their type definitions in two places, one where they can be picked up by the master and one where they can be sent as plug-ins to agents.