I have found two open source (and free) programs that are based on the same algorithm in SuperMemo. The idea is pretty simple: it's best to practice remembering something right about when you are going to forget it. Timing the practice right gets it into your long term memory faster.
Both programs are flash card programs.
So, I have Anki at work. It's the most polished of the two, in terms of interface. I tried downloading a pre-made Spanish deck, but even with my limited knowledge, I knew some of the answers were inaccurate. I made my own of sixty-one very basic words I found at lingolex.com. It worked pretty well. The first time I went through it, told me to come back to it in 9 hours. I'm not hanging around the office that long! The next day I ran through them and I didn't have to practice again for two days. That day will be Sunday, so I won't be there either. But it doesn't seem to mind when I run late.
The other program is Mnemosyne. There is a .deb in the 8.04 Ubuntu repository, so I decided to try this one at home. The interesting twist to this one is that they ask you to allow an anonymous upload of your results. In both programs you indicate on a scale from 1 to 5 how well you remember something. At startup, Mnemosyne explains 4 is the sweet-spot- 5 means it's too easy, 0 and 1 means you can't remember at all. 2 and 3 are somewhere in between.
So, the people at Mnemosyne can improve on the algorithm over time.
Mnemosyne also had a little checkbox that asked if you wanted to display the card twice; I can now see it's easier for me to guess the English equivalent to a Spanish word, but much harder for me to do the opposite.
Mnemosyne kept quizzing me until it calculated that I don't need to see any words until tomorrow- about 77 of the 203 or so I put into it. (also from lingolex.com- the internet terms list).
I like them both, but due to the Mnemosyne project's commitment to research, I think it may be the best in in the long run. Anki has features that are more specific to learning Asian languages, so which one is best may come down to what one is trying to learn.