Bring 4 cups water to a boil and add ½ cup Arborio or Carnaroli rice, ¼ teaspoon salt and 2 tablespoons unsalted butter.
Stir to prevent the rice from sticking to the bottom of the pan until it boils again. Lower the heat and simmer for about 20 minutes until the rice grains split open and overcook. Drain it.
Combine the cooked rice, ½ cup sugar and 2 cups milk in a heavy nonreactive saucepan and bring to a boil. Lower the heat and simmer gently, stirring often, until the mixture is thick and creamy, about 20 minutes. Remove from heat and cool at least until warm. Stir it often and chill it if needed to speed up the process.
Place ½ pound whole-milk ricotta in a large bowl. You can pass it through a sieve or strainer or puree it in a food processor if you want it smooth. I normally don’t, but I especially like the rustic texture. You can also mash the rice before mixing it with the rest of the ingredients.
Mix the ricotta into the rice mixture, followed by 4 large eggs, ½ teaspoon lemon zest, ½ teaspoon orange zest, 1 teaspoon vanilla extract and ¼ teaspoon ground cinnamon. Set aside while preparing the crust. Cover it to prevent dryness.