Dropbox Started as a Python Script on a Bus Ride - https://www.youtube.com/watch?v=69HHFdoz34M
Well, I started working on Dropbox because I kept forgetting my thumb drive. And eventually I just got sick of having this problem and I wanted to solve it permanently, first for myself, but then it was clear that many other people would be were dealing with a lot of the same issues. So it was on this one bus ride where I forgot my thumb drive at home. This was 2006. I had my laptop with me, but I realized that I didn't have my thumb drive and so I was super frustrated. And this was before the iPhone. You didn't have WI FI on the bus. So I had something like four hours of time to kill. And so I opened up the editor and started writing some Python code. Not really envisioning starting a company or anything, but really just to mechanically solve this problem of never carrying around my thumb drive again. And the first few lines of code were basically around, all right, I need to watch a folder or a directory for changes, and anytime a file changes, I need to identify the change and sync the difference up to a server. If you think about Dropbox, it's a cross platform piece of software by design and by necessity. Dropbox helps you sync your files across Windows and Mac and Linux. So if you think about it, the conventional way to do that would have been to build a Windows version in C and use the Win32 API and use a different stack for Mac and a different stack for Linux. I didn't have time for that. So I was hoping and kind of praying that I could be able to write one version of the app that would run anywhere. This was mainly out of necessity because I was just one person. And then I partnered up with my co founder shortly thereafter. But then there were two people. So my co founder is basically writing the server of Dropbox and I was writing the client software. And the conventional way to do it would have been to have to be like in very low level systems code on all these different platforms. But with Python, my hope, and with the little bit of experience I had, I'd used Python on every major operating system and it broadly worked the same way. And in general I could write a script on Windows and have it run on Linux and vice versa. But Dropbox was also very tightly integrated in the operating system, so that posed a bit of a challenge because we still needed the capability and the performance and these really tight integrations with the operating system. But. But I just started writing in Python and hoping that none of the roadblocks would completely blow me up. So the BASIC architecture was like I had the main version of the app, which was OS OS agnostic. It had the basic syncing logic. And then there were operating system specific backends for each of the major operating systems. But I was always concerned, like, hey, are we going to have performance problems? Because it's an interpreted language, There was no precedent. So when you've used, if you download Firefox or something back then it would be a broadly compiled or the core of the app would be written in the operating system native language or something that's C or C. And then there are other challenges, like Dropbox would have to be multi threaded because there's a lot going on simultaneously. One thread would be talking to the network, another might be reading the hard disk, another might be doing a lot of sync engine logic. And fortunately, Python had solutions for each of those problems. I didn't know it at the time, I had to kind of walk into the jungle and hope that I could get out the other side. But there were a lot of benefits from, in addition to just the expressivity of the language itself, lending itself to clean design, then there was also a really mature standard library. And so a lot of other programmers had figured out all the contours of the different operating systems and had kind of batteries included on every platform. And then from some of the trickier things around multi threading, even things like memory usage or optimizing memory usage, and then these deep OS integrations or things that were pretty CPU intensive, like these hashing algorithms or compression or encryption, either there was a library available for, that was usable, that already had a binding for Python, or I could take something that was in C and wrap it with a Python binding. And so fortunately we just started marching and then there was a lot of navigating around little different potholes, but it ended up being probably the best technical decision we ever made to use Python.
Dropbox Started as a Python Script on a Bus Ride - https://www.youtube.com/watch?v=69HHFdoz34M
음, 저는 USB 드라이브를 자꾸 잊어버려서 Dropbox 개발을 시작했습니다. 결국 이 문제가 정말 싫어져서 영구적으로 해결하고 싶었어요. 처음엔 저를 위해서였지만, 다른 많은 사람들도 비슷한 문제를 겪고 있다는 것이 분명했습니다. 그래서 그 버스 안에서 USB 드라이브를 집에 두고 온 날이었죠. 2006년이었습니다. 노트북은 가지고 있었지만 USB 드라이브가 없다는 걸 깨달았고 정말 좌절스러웠어요. 아이폰이 나오기 전이었고, 버스에는 와이파이도 없었습니다. 그래서 약 4시간 정도 시간을 보내야 했어요. 그래서 에디터를 열고 파이썬 코드를 작성하기 시작했습니다. 회사를 차리려는 생각은 아니었고, 정말 단순히 USB 드라이브를 다시는 들고 다니지 않아도 되는 문제를 해결하고 싶었어요. 처음 몇 줄의 코드는 기본적으로 폴더나 디렉토리의 변화를 감시하고, 파일이 변경될 때마다 변경사항을 식별해서 서버로 차이점을 동기화하는 것이었습니다. Dropbox를 생각해보면, 이는 설계상 그리고 필요에 의해 크로스 플랫폼 소프트웨어입니다. Dropbox는 Windows, Mac, Linux에서 파일을 동기화해줍니다. 생각해보면, 일반적인 방식으로는 Windows 버전을 C로 만들고 Win32 API를 사용하고, Mac용으로는 다른 스택을, Linux용으로는 또 다른 스택을 사용했어야 했을 겁니다. 저는 그럴 시간이 없었어요. 그래서```vtt 어디서든 실행될 수 있는 앱의 한 가지 버전을 작성할 수 있기를 바라고 기도했습니다. 이는 주로 필요에 의한 것이었습니다. 저는 혼자였거든요. 그리고 얼마 후 공동 창업자와 파트너십을 맺었습니다. 그래서 두 명이 되었죠. 공동 창업자는 기본적으로 Dropbox의 서버를 작성하고 저는 클라이언트 소프트웨어를 작성했습니다. 기존 방식대로 했다면 모든 다른 플랫폼에서 매우 낮은 수준의 시스템 코드를 작성해야 했을 것입니다. 하지만 Python으로, 제가 희망했던 것은 약간의 경험을 통해 모든 주요 운영체제에서 Python을 사용해봤는데 대체로 같은 방식으로 작동했습니다. 일반적으로 Windows에서 스크립트를 작성하면 Linux에서도 실행되고 그 반대도 마찬가지였습니다. 하지만 Dropbox는 운영체제와 매우 밀접하게 통합되어 있어서 약간의 도전이 있었습니다. 여전히 성능과 기능, 그리고 운영체제와의 매우 긴밀한 통합이 필요했기 때문입니다. 하지만 저는 그냥 Python으로 작성하기 시작했고, 어떤 장애물도 저를 완전히 막지 않기를 바랐습니다. 기본 아키텍처는 앱의 메인 버전이 있었고 이는 OS에 구애받지 않았습니다. 기본 동기화 로직이 있었고 각 주요 운영체제별로 특화된 백엔드가 있었습니다. 하지만 저는 항상 걱정했습니다. 성능 문제가 있을까요? 인터프리터 언어이기 때문에 선례가 없었습니다. 당시에 Firefox 같은 것을 다운로드했다면 대체로 컴파일된 형태였을 것입니다. ``````vtt 또는 앱의 핵심은 운영체제 네이티브 언어나 C 또는 C++로 작성되어야 할 것입니다. 그리고 다른 과제들도 있었습니다. Dropbox는 멀티스레드여야 했는데 동시에 일어나는 일이 많았기 때문입니다. 한 스레드는 네트워크와 통신하고, 다른 스레드는 하드디스크를 읽고, 또 다른 스레드는 동기화 엔진 로직을 처리해야 했습니다. 다행히 Python은 이러한 문제들 각각에 대한 해결책을 가지고 있었습니다. 당시에는 몰랐지만, 일종의 정글 속으로 걸어들어가서 반대편으로 나올 수 있기를 바라야 했습니다. 하지만 언어 자체의 표현력 외에도 많은 이점이 있었습니다. 깔끔한 설계를 가능하게 하고, 또한 정말 성숙한 표준 라이브러리가 있었습니다. 그래서 다른 많은 프로그래머들이 여러 운영체제의 모든 특성을 파악해두었고, 모든 플랫폼에서 배터리가 포함된 상태였습니다. 그리고 멀티스레딩 주변의 까다로운 것들, 심지어 메모리 사용량이나 메모리 사용량 최적화, 그리고 깊은 OS 통합이나 CPU 집약적인 것들, 예를 들어 해싱 알고리즘이나 압축, 암호화 같은 것들도 사용할 수 있는 라이브러리가 있거나 이미 Python 바인딩이 있는 것들이 있었고, 또는 C로 된 것을 가져와서 Python 바인딩으로 감쌀 수 있었습니다. 그래서 다행히 우리는 그냥 나아가기 시작했고, 그 후에는 다양한 작은 것들을 탐색하는 일이 많았습니다. ``````구멍들이 있었지만, 결국 파이썬을 사용한 것이 우리가 내린 최고의 기술적 결정이었을 것입니다. 파이썬을 사용한 것 말이죠. ```