> But I think the spirit of dup > described above is that dup defined in a subclass should initialize it > using its constructor. I'd understand the description in such a way that user should override neither #dup not #clone but instead create a #initialize_copy method to implement anything class-specific (including a non-shallow copy). Since that method is called by #clone and #dup and the frozen/tainted state could be easily reset, I personally still don't quite understand why there are two methods.