Я не слышал ничего авторитетного. И, честно говоря, я не думаю, что Apple так много обожает. В прошлом я задал эту тему и сформулировал свое собственное мнение, которое я поделюсь:
Основная цель префикса имени - избежать столкновений имен. Это особенно относится к самим пакетам kext, но, как вы упомянули, также к классам C++, которые имеют одно пространство имен в системе типа времени запуска OSMetaObject
. Дело с открытым исходным кодом заключается в том, что есть вилки, поэтому вы не можете контролировать то, что могут сделать другие люди с вашим кодом, и если внезапно появятся несовместимые сбои сборки несовместимых вилок, это может вызвать проблемы в системах пользователей. Так вот, случай, который мы пытаемся избежать, не так ли?
Таким образом, основное внимание уделяется сборкам, а не столько исходному коду. Я все равно считаю, что обратные DNS-префиксные имена раздражают, поэтому я всегда использовал #define SaneClassName tld_domain_driver_ClassName
, чтобы сделать мой код немного более читаемым. Я с тех пор расширен, чтобы это использовать макрос, что-то вроде этого:
#define SaneClassName PREFIXED_NAME(ClassName)
Если PREFIXED_NAME
макрос определяется таким образом:
#ifndef NAME_PREFIX
#error Must #define a unique, reverse-DNS-style NAME_PREFIX, e.g. com_example_driver_
#endif
#define PREFIXED_NAME_CONCAT2(prefix,name) prefix ## name
#define PREFIXED_NAME_CONCAT(prefix,name) PREFIXED_NAME_CONCAT2(prefix, name)
#define PREFIXED_NAME(name) PREFIXED_NAME_CONCAT(NAME_PREFIX, name)
Вы можете сделать NAME_PREFIX
параметр конфигурации в системе сборки и передайте его компилятору через -DNAME_PREFIX=com_example_driver_
, так что если кто-то разворачивает код, он не может построить по умолчанию, если только они не выбрали подходящий префикс. Если вам нравится, напишите в сообщении #error, что префикс должен быть уникальным. Вам также необходимо убедиться, что идентификатор пакета, который заканчивается как в файле info.plist, так и в двоичном файле kext, также устанавливается системой сборки на основе пользовательской конфигурации.
Если у вас нет имени домена, связанного с вашим проектом, вы можете выбрать имена в зависимости от места размещения (com_github_organisationname_project_) или на основе адреса электронной почты. Если вас беспокоят отдельные разработчики проекта, выпускающие конфликтующие бинарные сборки, вы можете попросить их использовать, где они размещают свои общедоступные вилки, правило адреса электронной почты или предоставлять им «поддомены» (com_github_organisationname_project_person_).
То, что вы, конечно же, не можете контролировать, несмотря на эти усилия, заключается в том, что kext загружается в систему пользователя, если на машине пользователя установлены наборы из двух вилок, и они соответствуют тому же устройству. Если это становится проблемой, вам просто нужно обучить своих пользователей. Кажется маловероятным!
Вау, вы дали это много мыслей - отличные предложения, спасибо! – user3814483