Finally, the Linux kernel is now supporting IPv6 multicast forwarding with the recent commit of Hideaki Yoshifuji (Thanks for his great work around IPv6 support in recent Linux kernel). That's a great news and we could expect it in the next 2.6 release (of course, you can compile the current master branch). FreeBSD was natively supporting IPv6 multicast forwarding since end of 2002 as the KAME project used FreeBSD for the reference IPv6 implementation.
Before you were forced to use various tricks in order to make IPv6 multicast forwarding/routing under GNU/Linux. One of the trick is to gather the MLD (the IGMP-like protocol for IPv6) messages on each interface and do forwarding based on the messages received (the system x wants to receive group y). The system works quite well in very common tree structure where a lot of systems are connected to an aggregated infrastructure like an ISP. There is a free software implementation for Linux (if you are not running the master branch and cannot wait forwarding IPv6 multicast ;-) called ecmh doing this. The concept of "multicast forwarding based on MLD learning" is also described in the RFC 4605. Beside the new IPv6 multicast forwarding in the Linux kernel, the other approach is still applicable for old kernel or devices not able to run a recent kernel.
So I just hope that the RFC 5058 (Xcast) won't take so many years to be implemented by default in the Linux kernel… ;-)