We propose a new approach of performing automatic program parallelization: divide a program into traces and execute these traces in parallel. We examine the issues that need to be addressed for this approach to be successful. These issues include how traces are collected, how they are selected, how they are scheduled, and how dependence is enforced. We also present a feasibility study that shows that our approach has merit.