[Galaxy S III Original Android Development] Arifcatalyst:
A Word To The Inexperienced Users (I am primarily included)

Back to the real talk. So you want Android Lollipop 5.0, hell, we all want it. Seeing all those "Android 5.0 ported to blah blah" made you drool all over the screen, and gave you some hope, no? Buddy, what you are seeing are AOSP ports, that's Android Open Source Project, you read that? O P E N S O U R C E... But wait a minute, Exynos is a closed-source bastard, so why shake a leg if it ain't going to be stable, or even "bootable"? Do you think it's that easy? J

READ THIS -A Google+ post By Andrew Dodd

The Saga of a CyanogenMod Exynos4 device maintainer - The Beginning

Disclaimer: This series of posts contains the personal opinion/perspective of just one member of the team. It is not, in any way, an official statement from the project.

Obviously, nearly anyone following me is aware of the recent social media storm resulting from the frustration the third-party Android firmware community (especially CyanogenMod users and developers) has been experiencing with Samsung. The "Superbrick" fiasco, the lack of documentation of Samsung's Exynos4 SoC compared to Qualcomm and TI's SoCs, and a laundry list of other issues - it has all recently come to a head with the decision of all currently active Exynos4 device maintainers to not take on any new devices, and in the case of +Daniel Hillenbrand , begin selling off the devices they are currently maintaining in order to purchase devices from other manufacturers.

To understand better where we are, it is best to understand how we got here. In order to do so, I'm going to chronicle my personal history of dealing with Samsung devices, leading to why the Note 10.1 is going to be my last Samsung device unless major changes are seen from Samsung.

The Beginning

Many people wonder how I got started with Android platform development, how I learned what I know, etc. So in this post I'm primarily going to focus on my first experiences with Android in late 2010 and throughout most of 2011 in this post. My next post will cover the timeframe from the SGH-I777 launch until around when I became involved directly with Cyanogenmod, and then 2-3 more posts covering the rest of 2012 including the "Superbrick" fiasco.

As to my background - I've always been more of a hardware guy than a software guy historically. My educational background is an M.S. in Electrical Engineering, and my focus for many years was on RF and communications. One of my main hobbies prior to Android was microcontrollers - especially AVRs. It's amazing what an 8-bit machine can do!

My first Android device was a Huawei S7. I won't say too much other than - it was an awful device. It shipped with Eclair, and the radio firmware was horribly broken and would completely crash when connected to any tower outside of my own area code. Huawei took months to release kernel source code, and the accelerometer axes were all wrong. When Froyo was finally released in Malaysia (only to users who took their device into a service center!), Huawei's answer for Best Buy USA customers was, "Want Froyo? Buy the new S7 Slim!". Needless to say, I will never be purchasing another Huawei device ever again.

My next Android experience was actually an existing device - I installed xdandroid on my HTC Tilt 2, which normally runs Windows Mobile 6.x. It was a great first step into Android, and the Rhodium development community was excellent. I dug into the GPS HAL and fixed a few annoying bugs, but at that point wasn't familiar enough with the Android platform source to make real progress.

Eventually, in the summer, I was eligible for an AT&T device upgrade, and the Samsung Infuse was the first pure-touchscreen device with a keyboard I could tolerate. In addition, I had seen the news about Samsung donating Galaxy SII devices to the Cyanogenmod team, which was very attractive to me after seeing how poorly HTC and Motorola had been treating the development community. I bought it, and I think I lasted about 2 hours on the stock firmware before installing something custom from XDA. The Infuse community back then was excellent - There were a large number of high-caliber developers like gtg465x, LinuxBozo, h8rift, and others. The best thing was that while there were lots of skilled developers, they weren't cargo-cult-inspiring prima donnas like some in the I9100 community are. We were working with an oddball device and we had a common enemy (AT&T) - life was good. The activity on IRC the day the Infuse launched in Canada with Gingerbread was exhilarating. That's when I started really learning about Android internals, and maybe 2 months later is when I felt comfortable releasing my first kernel on XDA.

That said, due to being an oddball redheaded stepchild, the Infuse was frustrating. The Rogers release was half-baked, and numerous oddities prevented a good Cyanogenmod 7 bringup on that device. (It took nearly a year to finally figure out Bluetooth on it...) - So I purchased a Galaxy S II from AT&T on launch day, which was my first experience in working with +Atin M and +Daniel Hillenbrand as we tried to get good clean firmware dumps in order to generate return-to-stock packages for the device. (We didn't want a mess like the Epic 4G Touch where people were flashing custom kernels for two weeks without any way to return back to the original one.)

So with that, I'm going to end this post, and start the next one in a day or two. I will add a link to that post from this one when the time comes.

Well, here comes the second part of my saga, which started with https://plus.google.com/u/0/101093310520661581786/posts/cdPnNjLAb4F . I'm a little tired, and my memory is semi-vague in regards to this era, but it is the time when I started to see the truth of Samsung's developer friendliness. I bought my Infuse, and the I777, based on the perception of developer friendliness put forth by Samsung's donation of I9100 units to the CyanogenMod team, and their hiring of Steve Kondik himself in August 2011.

Most of my time from those days on the I777 was a bit of a blur. I primarily stuck to Touchwizz kernels back then, partly because CM7 on the I777 wasn't quite ready and I wasn't familiar enough with it to improve the maintenance situation, and partly because Touchwizz on Gingerbread was decent.

In November or so, I finally started looking into how to get I9100 firmwares running on the I777 - How similar were these devices in reality? My inspiration came from LinuxBozo's Hellraiser for Infuse. The good news is, it turned out not too difficult. I just needed to swap out libaudio, and touchkey stuff. Interestingly enough, if I added just one XML permissions file, NFC would work on ported I9100 firmwares! (AT&T had forced Samsung to put in code to explicitly disable NFC if an I777 was detected in the Settings app.)

Most of my contact with the CM team consisted of occasionally shipping patches over to +Atin M and +Daniel Hillenbrand with fixes for bugs I had found, such as the fuel_alerted wakelocks in the MAX17042 driver (Which Samsung STILL hasn't fixed after more than a year, even though we've provided the patch to them multiple times...). Atin also gave me critical information needed for Hellraiser.

In early November, AT&T announced the Galaxy S II Skyrocket. Just a month after the I777, they announced yet another GSII with a completely different processor. At that point I was NOT a fan of Qualcomm, as back then they did extremely poorly in terms of documenting their SoCs. I actually called it the "****rocket". I still do, as I'm annoyed at Samsung and AT&T confusing the hell out of users by announcing two completely different devices with the SAME DAMN NAME. As an aside, the Skyrocket/Hercules led to some... Interesting things within XDA's RD program. An RD (Melvin, I think?) had quite the fall from grace, by going from RD to banned in about 2 weeks over violations of donation-soliciting rules. More on this later, as it was the start of some changes for XDA.

Around then is when the Galaxy Nexus, and Ice Cream Sandwich, was announced. I wasn't too impressed with the hardware back then, as back then, hardware still mattered more than software. However some of the ICS UI improvements were greatly anticipated. Atin and Daniel started working on I9100 ICS, and I kind of stuck with TW Gingerbread - I knew there was no point on the I777 until I9100 ICS kernel source dropped.

Around here is when things started going downhill in terms of Samsung's developer relations... They started doing things that were, simply put, nothing but antagonistic of the developer community.

In November, Samsung released XWKK5 for I9100 and UCKK6 for I777. Bluetooth HID on these builds would not function with any source-built kernels - only with binaries associated with those builds. Samsung never released another Gingerbread source update for the I9100, even though their binaries showed clear evidence of a functional change to the source. Similarly, I777 UCKK6 source wasn't released until some unknown time in mid-2012 - I'm fairly certain not until after I9100 ICS was released at best. That's right - Samsung was violating the GPL with I777 UCKK6 and every I9100 Gingerbread build from XWKK5 (November 2011) until they officially released I9100 ICS (March 2012) - Actually, technically they still are, as Gingerbread source corresponding to those kernels was never released, but it just doesn't really matter any more. Throughout this time, I started spending more time in the I9100 forums, as it became clear exactly what was different for I777 and what from I9100 could be leveraged. (I was a regular poster on the VillainROM thread, as that was my favorite firmware package for quite a while.)

Around the same time, Samsung launched the Tab 7.0 Plus and Tab 7.7, both based on the same Exynos 4210 SoC found in the GS2. These were highly attractive, and I nearly purchased one - but I saw things in the communities for those devices that were extremely disturbing. These devices used an Atheros AR6000-series wifi chip. Interestingly, Atheros provides source for these devices under a dual-license, GPL and BSD. (As Atheros holds full copyright to all components of their reference driver, this is legal.) Samsung chose the BSD license for this driver. The end result is, when asked for wifi driver source (which was not present in the source drops for these devices), Samsung replied with "code is dual license GPL or BSD. We choose BSD." Translation: HAHA **** YOU DEVELOPERS! ENJOY SPENDING A YEAR GETTING WIFI TO WORK ON THIS THING! (Wifi on these devices is STILL flaky, which is a major reason why CM still hasn't merged these two devices and kicked off nightlies.) - See http://xdaforums.com/showthread.php?t=1445526 for more details.

Oh, you might see my rant about SamsungJohn in the above post. That's another frustration with Samsung - Unlike Sony, who puts their devrel guys who can actually do something (like KalleD) front and center, Samsung's publically-facing official devrel contact is just a PR weenie who does nothing but: Cross-post promises of "something big" all over XDA and fail to deliver (look at his posting history), promise AGAIN that "something big" is coming and fail to deliver AGAIN, then claim that Samsung is going to sponsor 3 developers from XDA to go to a conference (and AGAIN fail to deliver - http://xdaforums.com/showthread.php?t=1291758 ) - All he does is tweet about OSRC releases 2-3 weeks after anyone who is remotely competent has already found them, and shuffle Google I/O Tab 10.1 owners to a special support email.

Around December, Sony announced they were providing an ICS alpha for their 2011 devices, which included kernel source - http://www.xda-developers.com/andro...s-official-alpha-build-of-ice-cream-sandwich/ - The Samsung Infuse had been receiving leaks of Gingerbread builds for AT&T with working HDMI for a few months at this point, so I contacted John to see if it might be possible to get a source drop so that Infuse users could get working HDMI on Gingerbread. No response.

In February, Samsung officially started delivering Gingerbread to users via OTA. After about a week, the updates stopped due to issues with the update, however, as Samsung HAD officially provided binaries to users, they were obligated to provide kernel source for this build. However, when contacted, their response was that as they had removed the update from their OTA system, they didn't have to provide source. Sorry Samsung, it doesn't work this way - If you provide a binary to users, one that they cannot easily revert back from (thanks to Gingerbread requiring a bootloader update), you are obligated to provide source code to those users - even if you have stopped providing binaries to additional users, those who received the binaries officially must be provided kernel source code upon request. ANOTHER GPL violation from Samsung.

Infuse users didn't see kernel source until March when another build went live. Those who received UCKL2 never received corresponding source in compliance with the GPL.

Also, around February, ClockworkMod Touch was released, and bricked a bunch of Epic 4G Touches... Little was known about why back then, and the developer community was as of yet unaware for the nightmare Samsung was about to put them through... More on this in a later post.

Sometime around this time, XDA announced its Elite Recognized Developer program. It was the result of discussion about the fact that there was a wide spectrum of skillsets within the RD community - from those who probably didn't deserve the RD title (like Melvin) to some top-notch kernel/hardware hackers. Somehow, I was one of the 25 chosen - I believe due to my tendency to always document what I can do so that others can leverage my discoveries (important for open source AND especially for users of devices I don't own). It was good timing, as the ERDs were going to receive a huge challenge (see previous paragraph...)

Eventually, in March, I9100 ICS went live. A week later, kernel source showed up. It was go-time for I777 users - we finally had hope of ICS, if I could figure out a way to get call audio to work without I777 libaudio. Similarly, the CM guys could finally provide useful builds without hacked binary kernels due to kernel source (for the entirety of those months, CM9 on I9100 was in bad shape due to Samsung's blobs being highly nonstandard and failing to work with compatibility wrappers that worked fine on other devices.) I don't remember much detail about the chronology of this, but I know I did another Hellraiser release for ICS, spent a week reverse engineering the fact that I9100/I777 had swapped microphones, and started coordinating very closely with +Atin M . Everyone had a lot of work cut out for them, as it took a team of 4-5 kernel developers to fix Samsung's totally broken cpufreq code which led to a system hang any time the cpufreq policy limits were adjusted to be below the current CPU frequency (such as applying a screen-off frequency profile.)

With that... This post is getting way too long. Next up - The beginnings of my involvement with the CyanogenMod team.

This is a continuation from my last post on this topic from https://plus.google.com/u/0/101093310520661581786/posts/ZgBQuZNzMZL