GUIDs are used in Mozilla programming for identifying several types of entities, including XPCOM Interfaces (this type of GUIDs is callled IID), components (CID), and legacy add-ons—like extensions and themes—that were created prior to Firefox 1.5. Add-ons can (and should) be identified with IDs of the form extensionname@organization.tld
since Firefox 1.5.
Warning: If you just want an ID for your add-on, generating a GUID is almost definitely not what you want to do. Using the extensionname@organization.tld
form is approximately one thousand times easier for everyone involved. Don't have a domain name? Do you have a blog on a subdomain? Use that. If all else fails, using extensionname@yourusername.addons.mozilla.org
should be fine; no one will care. Remember, these are identifiers, not e-mail addresses, and they're never resolved.
The common form of a GUID is xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
, where each x
stands for a hexadecimal digit. There are a number of tools that can be used to generate a GUID in the canonical form.
Note: If you do choose to use an email-style ID for your add-on, you probably don't want it to be a real email address, since it might attract spam.
/msg
ing "uuid" to them.Windows users can use the GuidGen tool from Microsoft to obtain a GUID. (This tool is also part of MS Visual C++)
Use /usr/bin/uuidgen
. This can be found in package uuid-runtime
(Debian).
Use /usr/bin/uuidgen
.
A UUID can be generated from privileged Mozilla code using nsIUUIDGenerator
. See the linked page for details.
When #define
-ing IIDs and CIDs in Mozilla C++ code, you generally use the following format:
// xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx #define NS_...ID \ { 0xXXXXXXXX, 0xXXXX, 0xXXXX, \ { 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX } }
You can generate code in this format using one of the following tools.
guidgen.exe
, part of Microsoft Visual Studio, can generate UUIDs in this format.
You can put the following into your .bashrc
file:
uuidgen-c++() { local UUID=$(uuidgen) echo "// $UUID" echo "#define NS__IID \\" echo "{ 0x${UUID:0:8}, 0x${UUID:9:4}, 0x${UUID:14:4}, \\" echo -n " { 0x${UUID:19:2}, 0x${UUID:21:2}, 0x${UUID:24:2}, " echo -n "0x${UUID:26:2}, 0x${UUID:28:2}, 0x${UUID:30:2}, " echo "0x${UUID:32:2}, 0x${UUID:34:2} } }" }
#!/usr/bin/perl $uuid = `uuidgen`; chomp $uuid; print $uuid, "\n"; @parts = ($uuid =~ /^(.{8})-(.{4})-(.{4})-(..)(..)-(..)(..)(..)(..)(..)(..)$/); print "{ 0x$parts[0], 0x$parts[1], 0x$parts[2], \\", "\n", " { "; for (3 .. 9) { print "0x$parts[$_], "; } print "0x$parts[10] } }", "\n";