Yes, you can put drives of similar sizes in raid groups ("vdevs") together and then stripe together dissimilar groups. You can also put them all together in one big group, but in that case the group will act as though all the drives are the size of the smallest one and waste the rest of the space.
Example disks:
* 2x 500GB
* 4x 1TB
Example of first option:
* Mirror of 500GB: 500GB
* RAID-Z of 1TB: 3TB
* Total Usable Storage: 3.5TB
* Total Overhead (Redundancy): 1.5TB
* Pool fails if any two drives of the same size are lost
Example of second option:
* RAID-Z1 of all: 2.5TB (Effectively RAID-Z1 of 6x500TB)
* Total Usable Storage: 2.5TB
* Total Overhead (Redundancy): 500TB
* Total Wasted: 2TB
* Pool fails if any two drives are lost
Terminology/facts in case any reader doesn't know:
* A mirror is what you'd think, basically RAID 1.
* A RAID-Z(1) is a RAID group with a single disk worth of
redundancy, like RAID 5.
* RAID-Z2 and RAID-Z3 are two- and three-disk redundancy
groups respectively.
* ZFS can stripe together any number of similar or dissimilar groups of drives, but if any one such group is lost the entire pool is corrupted.
Edited for formatting
Edit Edit: These behaviors are due to ZFS, not choices made by the FreeNAS developers.
The answer is complicated. ZFS wasn't designed with a small number of heterogeneous drive sizes in mind.
If you don't care about redundancy then you can span a volume across as many odd drives as you want free and clear.
If you do care about redundancy, you need sets of similar drives put together and then it only makes sense if you have a large number of drives.
Raidz has performance penalties and should only be used with a large number of vdevs unless you care little about speed.
An array of mirrors is the best way to go for small to medium sized zfs installations which means pairs of same-sized drives and only 50% available space.
Example disks:
* 2x 500GB
* 4x 1TB
Example of first option:
* Mirror of 500GB: 500GB
* RAID-Z of 1TB: 3TB
* Total Usable Storage: 3.5TB
* Total Overhead (Redundancy): 1.5TB
* Pool fails if any two drives of the same size are lost
Example of second option:
* RAID-Z1 of all: 2.5TB (Effectively RAID-Z1 of 6x500TB)
* Total Usable Storage: 2.5TB
* Total Overhead (Redundancy): 500TB
* Total Wasted: 2TB
* Pool fails if any two drives are lost
Terminology/facts in case any reader doesn't know:
* A mirror is what you'd think, basically RAID 1.
* A RAID-Z(1) is a RAID group with a single disk worth of redundancy, like RAID 5.
* RAID-Z2 and RAID-Z3 are two- and three-disk redundancy groups respectively.
* ZFS can stripe together any number of similar or dissimilar groups of drives, but if any one such group is lost the entire pool is corrupted.
Edited for formatting
Edit Edit: These behaviors are due to ZFS, not choices made by the FreeNAS developers.